Docker 安装、使用记录

Docker 鲸鱼船装着集装箱

内容:

尚硅谷 Docker 入门视频:https://www.bilibili.com/video/av26993050

安装 Docker CE

多参考官方文档(Install Docker Engine),里面提供了各种 Linux 发行版的安装方式。

由于网络原因,使用官方镜像可能速度不够理想,可以使用阿里云提供的镜像进行安装,这里以 CentOS 7 为例,其他系统安装详见阿里云地址:https://developer.aliyun.com/mirror/docker-ce

运行如下,即可安装成功

1
2
3
4
5
6
7
8
9
10
11
12
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

# Step 4: 开启Docker服务
sudo systemctl start docker

配置国内 Docker 仓库镜像

以阿里云镜像为例,打开 https://www.aliyun.com/product/acr 申请阿里云的容器镜像服务 (免费)

  1. 进入控制台,选择镜像加速器
  2. 按照操作文档操作

附 CentOS 7 / Ubuntu 的操作命令

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装完成后运行: docker run hello-world,出现如下内容即安装运行成功。

常用命令

可参考官方文档:

镜像命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Docker 帮助
docker --help
-h

# 查看本地主机上的镜像
docker images [OPTION]
-a: 列出本地所有的镜像(含中间映像层)
-q: 只显示镜像 ID
--digests: 显示镜像的摘要信息
--no-trunc: 显示镜像的完整信息

# 搜索镜像名字
docker search
-s: 列出收藏数不小于指定值的镜像 (docker search -s 30 xxx)

# 下载镜像
docker pull xxx[:TAG] # 不写[:TAG]默认下载最新

# 删除镜像
docker rmi xxx1[:TAG] xxx2[:TAG] # 不写[:TAG]默认删除最新
docker rmi $(docker images -qa) # 全部删除
-f: 强制删除

容器命令:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 新建并启动容器
docker run [OPTION] image [COMMAND] [ARG...]
--name: 别名
-i: 以交互模式运行容器, 通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端, 通常与 -i 同时使用
-d: 后台运行容器, 并返回容器 ID, 也即启动守护式容器
-P: 随机端口映射
-p: 指定端口映射, 有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
-v 宿主机绝对路径目录:/容器内目录(:ro 只读不可写): 添加容器数据卷

# 列出当前正在运行的容器
docker ps [OPTION]
-a: 列出当前所有正在运行的容器 + 历史上运行过的
-l: 显示最近创建的容器
-n: 显示最近 n 个创建的容器
-q: 静默模式, 只显示容器编号
--no-trunc: 不截断输出

# 退出容器(在容器里)
exit # 退出并停止容器
Ctrl + P + Q # 退出不停止容器

# 启动容器
docker start [容器名或容器ID]

# 重启容器
docker restart [容器名或容器ID]

# 停止容器
docker stop [容器名或容器ID]

# 强行停止容器
docker kill [容器名或容器ID]

# 删除已停止的容器
docker rm [容器名或容器ID]
-f: 强制删除
docker rm -f $(docker ps -aq) # 删除全部容器
docker ps -aq | xargs docker rm # 删除全部容器

# 查看容器日志
docker logs [OPTION] [容器ID]
-t: 加入时间戳
-f: 跟随最新的日志打印
--tail: 数字 显示最后多少条

# 查看容器内进程
docker top [容器ID]

# 查看容器内部细节
docker inspect [容器ID]

# 进入正在运行的容器并以命令行交互
docker exec -it [容器ID] COMMAND [ARG...] # 在容器中打开新的终端, 可以启动新的进程
docker attach [容器ID] # 直接进入容器启动命令的终端, 不会启动新的进程

# 从容器内拷贝文件到主机
docker cp 容器ID:容器内路径 本机路径

DockerFile

官方文档:Dockerfile reference

保留关键字:

  • FROM:基础镜像,当前新镜像是基于哪个镜像的
  • MAINTAINER:镜像维护者的姓名和邮箱
  • RUN:容器构建时需要运行的命令
  • EXPOSE:当前容器对外暴露出的端口
  • WORKDIR:指定在创建容器后,终端默认登录进来工作目录
  • ENV:用来构建镜像过程中设计环境变量
  • ADD:将宿主机目录下的文件拷贝进镜像,且 ADD 命令会自动处理 URL 和解压 tar 压缩包
  • COPY:类似 ADD,拷贝文件和目录到镜像中
  • VOLUME:容器数据卷,用于数据保存和持久化工作
  • CMD:指定一个容器启动时要运行的命令(可以有多个,但只有最后一个生效,CMD 会被 docker run 之后的参数替换)
  • ENTRYPOINT:指定一个容器启动时要运行的命令(目的和 CMD 一样,都是在指定容器启动程序及参数)
  • ONBUILD:当构建一个被继承的 Dockerfile 时运行命令,父镜像在被子继承后父镜像的 onbuild 被触发

开启 Docker 的远程控制

编辑 /usr/lib/systemd/system/docker.service 服务

/usr/lib/systemd/system/docker.service
1
2
3
4
5
6
7
8
[Service]
Type=notify
- ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
+ ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

添加 -H tcp://0.0.0.0:2375 表示监听本机所有 IP 的 2375 端口,也可指定特定的 IP,如 -H tcp://192.168.123.132:2375

重启服务以生效

1
2
systemctl daemon-reload
systemctl restart docker

其他开启方式见参考一

参考:

  1. Docker 官方文档 - Daemon socket option
  2. Docker 开启 Remote API 访问 2375 端口

Docker 安装、使用记录

https://morooi.cn/2020/docker/

作者

SJ Zhou

发布于

2020-02-23

更新于

2021-01-06

许可协议

评论