背景说明
解决方案
容器查看
[root@vm1 etc]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
6bcfe0cc5da2 nginx "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp, :::8080-
994aa16f4d3b nginx "/docker-entrypoint.…" 11 minutes ago Up 11 minutes 0.0.0.0:49154->80/tcp, :::4915
65961d6728c6 nginx "/docker-entrypoint.…" 30 hours ago Up 30 hours 80/tcp
如果想查看最新的容器,则使用-l参数
[root@vm1 etc]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
6bcfe0cc5da2 nginx "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp, :::8080->8
[root@vm1 etc]#
容器强杀
[root@vm1 ~]# docker kill e0a155a4e04b
e0a155a4e04b
容器停止
[root@vm1 ~]# docker stop e0a155a4e04b
e0a155a4e04b
容器删除
[root@vm1 ~]# docker rm e0a155a4e04b
e0a155a4e04b
容器日志
[root@vm1 ~]# docker logs e0a155a4e04b
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/04/11 02:55:00 [notice] 1#1: using the "epoll" event method
2022/04/11 02:55:00 [notice] 1#1: nginx/1.21.5
2022/04/11 02:55:00 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/04/11 02:55:00 [notice] 1#1: OS: Linux 3.10.0-957.el7.x86_64
2022/04/11 02:55:00 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 65536:65536
2022/04/11 02:55:00 [notice] 1#1: start worker processes
2022/04/11 02:55:00 [notice] 1#1: start worker process 32
2022/04/11 02:55:00 [notice] 1#1: start worker process 33
2022/04/11 02:55:00 [notice] 1#1: start worker process 34
2022/04/11 02:55:00 [notice] 1#1: start worker process 35
2022/04/11 02:55:00 [notice] 1#1: start worker process 36
2022/04/11 02:55:00 [notice] 1#1: start worker process 37
2022/04/11 02:55:00 [notice] 1#1: start worker process 38
2022/04/11 02:55:00 [notice] 1#1: start worker process 39
[root@vm1 ~]#
容器进程
[root@vm1 ~]# docker top e0a155a4e04b
UID PID PPID C STIME TTY TIME CMD
root 102969 102949 0 10:54 ? 00:00:00 nginx: master process nginx -g daemon off;
101 103029 102969 0 10:54 ? 00:00:00 nginx: worker process
101 103030 102969 0 10:54 ? 00:00:00 nginx: worker process
101 103031 102969 0 10:54 ? 00:00:00 nginx: worker process
101 103032 102969 0 10:54 ? 00:00:00 nginx: worker process
101 103033 102969 0 10:54 ? 00:00:00 nginx: worker process
101 103034 102969 0 10:54 ? 00:00:00 nginx: worker process
101 103035 102969 0 10:54 ? 00:00:00 nginx: worker process
101 103036 102969 0 10:54 ? 00:00:00 nginx: worker process
[root@vm1 ~]#
启动命令
在启动容器时可以在启动命令后添加自定义启动命令
[root@vm1 ~]# docker run -it nginx /bin/bash
root@7757ae052e58:/# curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused
root@7757ae052e58:/#
这样就替换了默认的CMD命令
如下命令场景可以用来做抓包或者测试,因为新启动一个容器和历史容器在同一个子网内
[root@vm1 ~]# docker run -it --rm nginx /bin/bash
自动启动
容器启动后,当对Docker服务进行重启[systemctl restart docker]后容器不会自动启动。
如果想Docker重启后,容器自动启动,则需要指定参数—restart=always进行设定。
自动删除
再做容器测试或项目构建编译过程中,希望当容器运行完成后自动删除则可以指定参数—rm[关闭即删除]
[root@vm1 ~]# docker run --name nginx-host --rm -d nginx
28ad6349b505f71e202a1b438cc4e4f39b354238956f2fcf0b14149e2192a7da
[root@vm1 ~]# docker stop nginx-host
主机记录
容器在启动过程中会自动把容器IP和容器ID在容器/etc/hosts文件中进行添加
[root@vm1 ~]# docker run --name nginx-host -d nginx
28ad6349b505f71e202a1b438cc4e4f39b354238956f2fcf0b14149e2192a7da
[root@vm1 ~]# docker exec -it nginx-host /bin/bash
root@28ad6349b505:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3 28ad6349b505
root@28ad6349b505:/#
如果想添加其他容器的主机名称和IP可以通过参数—add-host进行添加
[root@vm1 ~]# docker run --name nginx-host-add --add-host nginx-web:172.17.0.250 -d nginx
e0a155a4e04b8d56d1bcf21e2acea798a527486103e06fe91f67dc4b09068029
[root@vm1 ~]# docker exec -it nginx-host-add /bin/bash
root@e0a155a4e04b:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.250 nginx-web
172.17.0.4 e0a155a4e04b
root@e0a155a4e04b:/#
主机名称
容器在启动过程中可以设定主机名称,默认情况下主机名称和容器ID保持一致
[root@vm1 ~]# docker run --name nginx-test -d nginx
58069dd61142056e0d05aefa7cef03ae288e675d987f9f9a2eb2207bd137d410
[root@vm1 ~]# docker exec -it nginx-test /bin/bash
root@58069dd61142:/# hostname
58069dd61142
root@58069dd61142:/#
通过-h选项指定主机名称
[root@vm1 ~]# docker run -h nginx-test-hostname --name nginx-test-hostname -d nginx
2b0abba9c6bee638fb3028475c276b56ff87d91bf6bdf302bc878d1df0ffaf7c
[root@vm1 ~]# docker ps |grep nginx
2b0abba9c6be nginx "/docker-entrypoint.…" 9 seconds ago Up 7 seconds 80/tcp nginx-test-hostname
58069dd61142 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp nginx-test
[root@vm1 ~]# docker exec -it nginx-test-hostname /bin/bash
root@nginx-test-hostname:/# hostname
nginx-test-hostname
root@nginx-test-hostname:/#
有些组件应用在启动时会把主机名称当做节点名称,这时候就需要在启动时指定主机名称
环境变量
https://hub.docker.com/_/mysql
这里运行mysql镜像时可以通过-e参数指定环境变量
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-e是—env的简写