首页 Docker 使用整理
Post
Cancel

Docker 使用整理

Docker 简介

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。 我们需要将 Docker 和 虚拟机区分一下,虚拟机是模拟了整套的操作系统环境,可以在操作系统里面运行另外一个操作系统。 而 Docker 并没有模拟完整的操作系统,而是对进程进行隔离。 或者说,在正常的进程外面套了一个保护层,对于容器里面的进程来说,他接触到的各种资源都是虚拟,从而实现了于底层系统的隔离。 因为 Docker 容器是进程级别的,相比于虚拟机,启动快,占用资源少。

Docker 安装

Docker 有很多版本,这里介绍 docker ce (Community Edition) 的安装。

Windows

安装包: https://www.docker.com/docker-windows 安装文档: https://docs.docker.com/desktop/windows/install/

既然 Docker 是基于 Linux 容易的一种封装,那么 Docker Windows 是基于什么呢? 答案是,基于 Hyper-V 或者 WSL2,这两个实际上会启动 Linux ,然后在此基础上在运行 Docker.

Ubuntu

https://docs.docker.com/engine/install/ubuntu/

运行以下命令安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Uninstall Old Docker
sudo apt-get remove docker docker-engine docker.io containerd runc
# Update APT-GET Repository
sudo apt-get update
# Install packages to allow apt to use a repository over HTTPS:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# Add Docker’s official GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88

# Set Repository
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
# Install Docker
sudo apt-get update
sudo apt-get install docker-ce

检查安装是否成功

1
2
docker version 
docker info

Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组

1
sudo usermod -aG docker $USER

基本命令

Image 文件

Image 文件是 Docker 应用程序的基础,应用程序以及依赖都打包在 Image 里面,只有通过这个文件才能生成 Docker 容器

1
2
3
4
# 列出所有镜像
docker image ls
# 删除镜像
docker image rm [imageName]

Docker Run

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# run hello-world
docker run hello-world

# 本地运行Docker帮助文档 8080 是本地端口, 80是Docker内的端口
docker run -d -p 8080:80 docker/getting-started

# 运行一个docker 服务器,重定向9080端口到nginx80端口
docker run -p 8080:80 nginx
docker run -it -p 8080:80 nginx # 运行nginx,将输出转移到控制台
docker run -it --rm -d -p 8080:80 --name web nginx

# 运行docker ubuntu
docker run -it ubuntu bash

# 查询本地运行的Docker进程,会列出Docker运行的进程
docker ps
docker ps -a # 查出所有的进程,包括已经停止掉得进程,问题,死掉的进程,contianer还在,怎么进去查看分析

# 进入某个进程
docker exec -it [contianerid] /bin/bash
docker exec -it 68067442d2f9 /bin/bash

# 容器运行之后,会生成一个文件,而且关闭容器并不会删除容器文件,只是容器停止运行而已
# 列出本机所有容器,包括终止运行的容器
docker container ls --all

# 进入 docker 进程查所有进程树
ps auxwwf

# 删掉 docker 进程
docker kill [contianerid]
# 对于那些不会自动终止的容器,必须使用docker container kill 命令手动终止。
docker container kill [containID]

Docker Build

1
2
3
4
5
6
7
8
9
10
# 构建一个docker image
sudo docker build -f dockerfile-receiver
# 编译当前目录Docker镜像
docker build . -t cylin2000/test
# 列出本机 image
docker image ls
# 删除本机 image
docker image rm xxxx
# 拉取 hello-world 镜像,因为 library 是默认组,所以可以省略
docker image pull library/hello-world

Docker file

创建一个文件保存为 Dockerfile

1
2
3
4
# Dockerfile
FROM nginx:latest
# This command will copy index.html from current folder to docker image /usr/share/nginx/html/ folder
COPY ./index.html /usr/share/nginx/html/index.html

Run following command build and run docker image

1
2
3
4
# docker build
docker build -t my-nginx .
# docker run 
docker run -it --rm -d -p 8080:80 --name web my-nginx

Docker Push 到其他 Repository

https://docs.microsoft.com/en-us/azure/container-registry/container-registry-get-started-docker-cli?tabs=azure-cli

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker pull nginx
# 注意上面语句等效于下面的语句
# docker pull docker.io/library/nginx:latest
# 打上TAG,注意TAG里面就包含了你 repository 的地址
docker tag nginx <myregistryname>.azurecr.io/calvin/nginx:latest

# 登录 docker registry 否则 push 会失败
docker login <myregistryname>.azurecr.io

docker push <myregistryname>.azurecr.io/calvin/nginx:latest

# 其他备参考
docker pull josephinef/enzweb:nginx-php7
docker tag josephinef/enzweb:nginx-php7 <myregistryname>.azurecr.io/josephinef/enzweb:nginx-php7
docker push <myregistryname>.azurecr.io/josephinef/enzweb:nginx-php7

# 如果出现下面错误,注意是否登录成功,是否 sudo 混用了
unauthorized: authentication required

参考资料

http://dockone.io/article/101
https://www.ctolib.com/docs/sfile/docker-practice/etcd/intro.html https://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html https://www.ruanyifeng.com/blog/2018/02/docker-wordpress-tutorial.html

【全文完】

This post is licensed under CC BY 4.0 by the author.

给 Sublime Text 创建一个 markdeep 插件

Bash 踩坑指南