Docker汇总
常用命令
动态查看容器日志(最近10行)
docker logs -f -t --tail 10 容器名查看镜像列表和详细信息
1
2
3docker images
docker inspect 镜像名称:TAG
docker inspect 镜像ID查看卷组列表和详细信息
1
2docker volume ls
docker volume inspect # 查看到的volume_name删除镜像
docker rmi 镜像名:TAG备份镜像
docker save centos:7 > /opt/centos7.tar.gz恢复镜像
docker load < /opt/centos7.tar.gz删除容器
1
2
3
4
5docker ps -a
docker stop 容器
docker rm 容器 或 docker rm -f 容器
docker rm $(docker ps -a -q)
# 用于批量删除所有容器,正在运行的不会被删除,如果加了参数-f 就会将运行中的也删除了!!!进入容器
docker exec -it 容器的ID /bin/bash查看容器的详细信息
docker inspect 容器ID
安装Docker
测试环境安装Docker
curl -sSL https://get.docker.com/ | sh
测试环境安装docker-compose
1 | # 下载 Docker-Compose 二进制包 |
生产环境
1 | $ curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
容器自启/取消自启
修改docker容器是否跟随docker服务自启动。
设置容器jira_mc跟随docker服务自启
docker update --restart=always jira_mc设置容器jira_mc不跟随docker服务启动
docker update --restart=no jira_mc
从阿里云推拉镜像
- 上传镜像到阿里
1
2
3$ docker login --username=131xxx@qq.com registry.cn-hangzhou.aliyuncs.com
$ docker tag 9b4ab3aa45a8 registry.cn-hangzhou.aliyuncs.com/wuxidocker/zentao:11.5
$ docker push registry.cn-hangzhou.aliyuncs.com/wuxidocker/zentao:11.5 - 从阿里下载镜像
1
2$ docker login --username=131xxx@qq.com registry.cn-hangzhou.aliyuncs.com
$ docker pull registry.cn-hangzhou.aliyuncs.com/wuxidocker/zentao:11.5
镜像加速
1 | $ vim /etc/docker/daemon.json #没有就创建 |
qianj的加速器https://2pumyfq5.mirror.aliyuncs.com
查看容器映射的目录关系
docker inspect container_name | grep Mounts -A 20
调整docker存储位置
因为默认下载的镜像都会存在/var/lib/docker/目录下,一般此目录是在/目录下的,可能/分配的空间不会太大。
建议加一块数据盘,然后调整docker数据存放位置到这个新加的数据盘,
例如数据盘挂载到/docerdata目录。
1 | $ mkdir /dockerdata |
使用docker info可以看到很多信息。比如运行的容器数量,包括docker的根目录(即数据的存放路径),已经配置的镜像加速地址(Registry Mirrors)
实操调整docker存储位置
调整之前的信息。打算将位置调整到/data/docker目录。
1
2
3
4
5
6
7
8
9root@u2-virtual-machine:~# df -h | grep -v tmpfs
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 94G 56G 34G 63% /
/dev/sda4 200G 43G 148G 23% /data
/dev/sda2 512M 6.1M 506M 2% /boot/efi
overlay 94G 56G 34G 63% /var/lib/docker/overlay2/69b3ded2dc84bf7c7db6e035c95198eb03c91dd4a4fae1ddea31975a08e39dae/merged
overlay 94G 56G 34G 63% /var/lib/docker/overlay2/6462388f84c6d1d957726ea219e6170f1258064ab1420481ce1a4a12ff8dbf56/merged
overlay 94G 56G 34G 63% /var/lib/docker/overlay2/9eaf52937c42c61c397d96f76cdb7670b1f5ff6706c0760c96b22952d6cb2c1e/merged
root@u2-virtual-machine:~#查看原默认存储位置
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
56root@u2-virtual-machine:/data# docker info
Client:
Version: 24.0.5
Context: default
Debug Mode: false
Server:
Containers: 3
Running: 3
Paused: 0
Stopped: 0
Images: 3
Server Version: 24.0.5
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version:
runc version:
init version:
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 6.5.0-27-generic
Operating System: Ubuntu 22.04.3 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.73GiB
Name: u2-virtual-machine
ID: 5a3077df-a687-4878-899c-e18abb96e761
Docker Root Dir: /var/lib/docker # 原来默认存储位置
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://q2gr04ke.mirror.aliyuncs.com/
Live Restore Enabled: false
root@u2-virtual-machine:/data#创建新存储目录,并将原目录拷贝到新目录
1
2
3root@u2-virtual-machine:~# cd /data/
root@u2-virtual-machine:/data# mkdir docker
root@u2-virtual-machine:/data# cp -ar /var/lib/docker/ /data/docker/修改存储位置的配置文件
1
2
3
4
5
6
7root@u2-virtual-machine:/data# vim /etc/docker/daemon.json
Press ENTER or type command to continue
1 {
2 "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
3 "data-root": "/data/docker/docker" # 添加此行
4 }
root@u2-virtual-machine:/data#重启docker服务
1
2root@u2-virtual-machine:/data# systemctl daemon-reload
root@u2-virtual-machine:/data# systemctl restart dockerdocker info查看存储位置,变成
Docker Root Dir: /data/docker/docker了。修改存储位置后,查看的信息如下

docker inspect jenkins | grep "/data/docker/docker" 查看验证
通过web访问jenkins、gitlab、gerrit均可正常访问和登录。
以上没问题后,可以将/var/lib/目录下的docker目录删除,然后将新目录创建软连接指向/var/lib/docker。
1
2
3
4
5
6
7
8root@u2-virtual-machine:~# cd /var/lib/
root@u2-virtual-machine:/var/lib# mv docker docker.old
root@u2-virtual-machine:/var/lib# ln -s /data/docker/docker /var/lib/docker
root@u2-virtual-machine:/var/lib# ll -d docker
lrwxrwxrwx 1 root root 19 5月 20 13:51 docker -> /data/docker/docker/
root@u2-virtual-machine:/var/lib#
root@u2-virtual-machine:/var/lib# systemctl restart docker
端口暴露
启动容器的时候,加参数-p 物理主机的端口:容器内的端口
1 | $ docker run -d -p 8888:80 nginx:latest |
文件拷贝
1 | $ docker cp 宿主机路径 容器ID或容器名:容器路径 |
数据持久化
volume
镜像一旦启动成一个容器,会自动将容器内的/var/lib/mysql的数据持久化到本地来(/var/lib/docker/volumes/),但是都是一些很长的ID名,很容易混淆。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17$ mkdir -p /dockerdata/docker/volumes/dbtest
$ docker run -d --name mysql2 -v dbtest:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.7
# 启动一个叫做mysql2的容器,将容器内的/var/lib/mysql挂载到dbtest这个挂载点来
$ docker volume ls
# VOLUME NAME中就会有自定义的挂载点目录dbtest了
# 验证
$ docker exec -it 9b041a555d5d /bin/bash # 进入mysql容器
$ mysql # 进入容器后进入mysql
$ create database jay; # 创建数据库jay
$ ll /dockerdata/docker/volumes/dbtest/_data
# 查看数据在宿主机的持久化目录下会多出一个jay目录,说明数据持久化是没有问题的
$ docker rm -f mysql2 # 模拟mysql2容器故障
$ docker run -d --name mysql3 -v dbtest:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.7
# 重启一个容器mysql3,使用mysql2原来的数据,进入mysql3中进行查看,原来创建的数据库jay还在bind mount
通常是将物理主机的一个目录挂载到容器中。1
2
3
4
5
6
7
8$ mkdir /webtest
# 在宿主机创建一个目录/webtest,在/webtest目录下新建一个index.html文件
$ echo "hello jay~" > /webtest/index.html
$ docker run -d -v /webtest:/usr/share/nginx/html -pp 8118:80 nginx:latest
# 启动一个nginx容器,将容器中的nginx的默认页映射到宿主机的/webtest目录;
# 后期开发人员如果需要修改,直接在本地的/webtest目录操作即可,容器中的文件会进行同步;
# 即nginx容器在读取代码的时候,实际就是读取的宿主机的/webtest目录下的代码
异常处理
- 创建容器时提示[Warning] IPv4 forwarding is disabled. Networking will not work.
解决办法:1
2
3[root@localhost ~]# vi /usr/lib/sysctl.d/00-system.conf
net.ipv4.ip_forward=1 # 添加此行
[root@localhost ~]# systemctl restart network



