Docker创建与查看容器常用参数解读
1、创建容器常用参数
-d # 后台运行容器 -P # 发布容器所有暴露的端口到宿主上的随机端口 --name # 指定容器名称 -p # 指定宿主和容器的端口映射关系 --always # 容器退出时,重启策略 -v # 挂载宿主机目录到容器 -e # 设置环境变量 --link # 添加连接到另一个容器
2、创建容器宿主随机映射端口
# 创建容器,宿主随机映射容器端口 [root@ansible ~]# docker run -d -P --name=stargao_httpd docker.io/httpd:2.4
[root@ansible ~]# docker stop stargao_httpd # 停止运行容器 [root@ansible ~]# docker rm stargao_httpd # 删除容器
3、宿主指定映射端口
# 创建容器,宿主指定映射容器端口 [root@ansible ~]# docker run -d -p 8888:80 --restart=always --name=stargao_http docker.io/httpd:2.4
4、容器文件路径映射到宿主
[root@ansible ~]# docker run -d -p 8888:80 \ -v /mnt/stargao_httpd:/usr/local/apache2/htdocs/ \ --name=stargao_httpd \ docker.io/httpd:2.4 # 注:-v前面是宿主文件路径,后面是容器文件路径;/mnt/stargao_httpd文件夹可以没有,系统会自动创建。 [root@ansible ~]# echo stargao >index.html [root@ansible ~]# mv index.html /mnt/stargao_httpd/ [root@ansible ~]# curl 10.25.25.25:8888
# 删除容器,观察映射宿主目录文件是否仍存在 [root@ansible ~]# docker stop stargao_httpd [root@ansible ~]# docker rm stargao_httpd
【注】映射容器文件路径到宿主,可起到持久化的作用。
5、宿主和容器文件互相拷贝
[root@ansible ~]# docker exec -it stargao_httpd bash /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/original/httpd.conf # 将容器中的文件拷贝到宿主 [root@ansible ~]# docker cp stargao_httpd:/usr/local/apache2/conf/httpd.conf /mnt/
# 将宿主上的文件拷贝到容器 [root@ansible ~]# docker cp /mnt/stargao_httpd/index.html stargao_httpd:/mnt
6、环境变量的使用
[root@ansible ~]# docker run -d -p 33060:3306 \ -e MYSQL_ROOT_PASSWORD=redhat \ -e MYSQL_USER=stargao \ -e MYSQL_PASSWORD=stargao \ -v /mnt/stargao_mysql:/var/lib/mysql \ --name=stargao_mysql \ docker.io/mysql:5.5
官网介绍:https://hub.docker.com/_/mysql
【注】-e后面具体能够跟的参数类型,需要到官方镜像仓库查找。
# 登录验证 [root@ansible ~]# mysql -uroot -h10.25.25.25 -P33060 -predhat
7、Host容器连接到DB容器
【注】场景:容器之间相互调数据,进行通信。
# 将名为stargao_centos的容器连接到stargao_mysql的容器 [root@ansible ~]# docker run -it --name stargao_centos --link=stargao_mysql docker.io/centos:6.9
8、列出容器详情
[root@ansible ~]# docker inspect stargao_centos # 输出太多,过滤IP地址 [root@ansible ~]# docker inspect stargao_centos |grep IP
9、容器时区配置
(1)运行容器时加环境变量
[root@ansible ~]# docker run -it --name stargao_nginx -e TZ="Asia/Shanghai" nginx
(2)将时区文件映射进容器
[root@ansible ~]# docker run -it --name stargao_nginx -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime nginx
(3)将时区信息封装到镜像中
10、容器网络与抓包
(1)获取容器网络信息
[root@10-27-0-224 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3b2b794e6271 registry.aliyuncs.com/openspug/spug "/entrypoint.sh" 27 hours ago Up 27 hours 0.0.0.0:80->80/tcp spug [root@10-27-0-224 ~]# PID=$(docker inspect --format {{.State.Pid}} spug) [root@10-27-0-224 ~]# nsenter -n -t $PID ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 71: eth0@if72: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default # 容器网卡信息 link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
(2)获取容器对应宿主网卡信息
【注】71: eth0@if72 对应网卡信息 72: vethc4158b9@if71
[root@10-27-0-224 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1454 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:e2:ec:84 brd ff:ff:ff:ff:ff:ff inet 10.27.0.224/24 brd 10.27.0.255 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:bd:92:39:0d brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever 4: br-36ce7f67bbf8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:f8:8f:b9:0d brd ff:ff:ff:ff:ff:ff inet 172.18.0.1/16 brd 172.18.255.255 scope global br-36ce7f67bbf8 valid_lft forever preferred_lft forever 72: vethc4158b9@if71: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default # 容器对应宿主网卡 link/ether 06:ae:a2:ea:1a:f1 brd ff:ff:ff:ff:ff:ff link-netnsid 0
(3)宿主上进行容器抓包
[root@10-27-0-224 ~]# tcpdump -i vethc4158b9 port 80 -A tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on vethc4158b9, link-type EN10MB (Ethernet), capture size 262144 bytes
11、进入容器方法
[root@ansible ~]# docker attach container_name # exit退出容器后,容器停止运行 [root@ansible ~]# docker exec -it container_name bash # exit退出容器后,容器依旧运行
12、docker search搜索DockerHub中镜像
[root@10-27-0-224 ~]# docker search crawlab NAME DESCRIPTION STARS OFFICIAL AUTOMATED tikazyq/crawlab Celery-based web crawler admin platform 14
13、docker top查看容器中进程
docker top命令是用来查看一个容器里面的进程信息的,比如你想查看一个wiki容器里面有几个wiki进程的时候,就可以这么做
[root@10-27-0-224 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0727b303968d requarks/wiki:2 "docker-entrypoint.s…" 8 hours ago Up 8 hours 3443/tcp, 0.0.0.0:80->3000/tcp root_wiki_1 [root@10-27-0-224 ~]# docker top 0727b303968d UID PID PPID C STIME TTY TIME CMD 1000 86085 86064 0 03:04 ? 00:00:46 node server
14、docker events获取docker各种事件信息
docker events可以帮助你实时获取docker的各种事件信息
[root@10-27-0-224 ~]# docker events 2021-09-13T10:47:41.483461551-05:00 container kill 0727b303968d814bcc52bb69279c5046f879012c840a077bb3c6809c54915433 (com.azure.dev.image.build.sourceversion=d5a5820c2f59e1315b5ba225809167f855a0131f, com.azure.dev.image.system.teamfoundationcollectionuri=https://dev.azure.com/requarks/, com.docker.compose.config-hash=5dde9c6ee86b9bfc5e015f36805f7e4c25cfb189965d0503d5429d554723919c, com.docker.compose.container-number=1, com.docker.compose.oneoff=False, com.docker.compose.project=root, com.docker.compose.service=wiki, com.docker.compose.version=1.18.0, image=requarks/wiki:2, image.base.ref.name==assets /wiki/server/views ./server/views, maintainer=requarks.io, name=root_wiki_1, signal=15)
15、docker update修改容器配置
当你docker run 了之后却发现里面有一些参数并不是你想要的状态比如你设置的nginx容器cpu或者内存太小,这个时候你就可以使用docker update去修改这些参数
[root@10-27-0-224 ~]# docker update nginx --cpus 2 #设置容器跟随Docker启动,docker ps查看容器id号 [root@ansible ~]# docker update --restart=always 容器id号
16、docker history查看镜像构建命令
当你修改了一个镜像,但是忘记了每一层的修改命令,或者你想查看一个镜像是怎么构建的时候就可以使用这个命令,比如
[root@10-27-0-224 ~]# docker history redis:4-alpine IMAGE CREATED CREATED BY SIZE COMMENT e3dd0e49bca5 16 months ago /bin/sh -c #(nop) CMD ["redis-server"] 0B <missing> 16 months ago /bin/sh -c #(nop) EXPOSE 6379 0B <missing> 16 months ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B <missing> 16 months ago /bin/sh -c #(nop) COPY file:c48b97ea65422782… 377B <missing> 16 months ago /bin/sh -c #(nop) WORKDIR /data 0B <missing> 16 months ago /bin/sh -c #(nop) VOLUME [/data] 0B <missing> 16 months ago /bin/sh -c mkdir /data && chown redis:redis … 0B <missing> 16 months ago /bin/sh -c set -eux; apk add --no-cache --… 13.5MB <missing> 16 months ago /bin/sh -c #(nop) ENV REDIS_DOWNLOAD_SHA=1e… 0B <missing> 16 months ago /bin/sh -c #(nop) ENV REDIS_DOWNLOAD_URL=ht… 0B <missing> 16 months ago /bin/sh -c #(nop) ENV REDIS_VERSION=4.0.14 0B <missing> 16 months ago /bin/sh -c apk add --no-cache 'su-exec>=0.… 1.35MB <missing> 16 months ago /bin/sh -c addgroup -S -g 1000 redis && addu… 4.67kB <missing> 16 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 16 months ago /bin/sh -c #(nop) ADD file:b91adb67b670d3a6f… 5.61MB
17、docker stats容器监控
docker stats是docker内置的监控命令,当你想要查看当前主机下所有容器占用内存和cpu的情况的时候就可以使用这个命令。
[root@10-27-0-224 ~]# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS fdcb78105ab8 root_db_1 0.03% 38.04MiB / 3.715GiB 1.00% 870kB / 654kB 0B / 55.6MB 7 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS fdcb78105ab8 root_db_1 0.03% 38.04MiB / 3.715GiB 1.00% 870kB / 654kB 0B / 55.6MB 7
18、docker diff查看容器内文件修改情况
当你运行了一个容器,但是你不知道容器里修改了哪一些文件的时候可以使用这个命令,比如
[root@10-27-0-224 ~]# docker diff root_db_1 C /run C /run/postgresql A /run/postgresql/.s.PGSQL.5432 A /run/postgresql/.s.PGSQL.5432.lock
19、docker 其它命令
[root@ansible ~]# docker logs stargao_centos # 查看日志排错 [root@ansible ~]# docker port nginx01 # 查看端口映射 80/tcp -> 0.0.0.0:8080 [root@ansible ~]# docker ps -a # 查看所有容器 [root@ansible ~]# docker rm -f $(docker ps -q -a) # 删除所有容器
作者:UStarGao
链接:https://www.starcto.com/docker/85.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-02-27K8S中RC模块和Deployment模块区别
- 2021-12-06MySQL PERFORMANCE_SCHEMA监控用法详解
- 2021-05-22MongoDB 集合与文档的相关操作
- 2021-06-11Linux常用命令工具集合
- 2023-07-04MySQL mysqldump备份之--set-gtid-purged=OFF参数影响