栏目头部广告

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

Docker创建容器参数解读(图1)

[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

Docker创建容器参数解读(图2)

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

Docker创建容器参数解读(图3)

# 删除容器,观察映射宿主目录文件是否仍存在

[root@ansible ~]# docker stop stargao_httpd
[root@ansible ~]# docker rm stargao_httpd

Docker创建容器参数解读(图4)

【注】映射容器文件路径到宿主,可起到持久化的作用。

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/

Docker创建容器参数解读(图5)

# 将宿主上的文件拷贝到容器

[root@ansible ~]# docker cp /mnt/stargao_httpd/index.html stargao_httpd:/mnt


Docker创建容器参数解读(图6)

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

Docker创建容器参数解读(图7)

Docker创建容器参数解读(图8)

官网介绍:https://hub.docker.com/_/mysql

【注】-e后面具体能够跟的参数类型,需要到官方镜像仓库查找。

Docker创建容器参数解读(图9)

# 登录验证

[root@ansible ~]# mysql -uroot -h10.25.25.25 -P33060 -predhat

Docker创建容器参数解读(图10)

7、Host容器连接到DB容器

【注】场景:容器之间相互调数据,进行通信。

# 将名为stargao_centos的容器连接到stargao_mysql的容器

[root@ansible ~]# docker run -it --name stargao_centos --link=stargao_mysql docker.io/centos:6.9

Docker创建容器参数解读(图11)

Docker创建容器参数解读(图12)

8、列出容器详情

[root@ansible ~]# docker inspect stargao_centos

# 输出太多,过滤IP地址

[root@ansible ~]# docker inspect stargao_centos |grep IP

Docker创建容器参数解读(图13)

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云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`