• 四、容器管理


    于2021年9月27日重新编辑

    一、容器查询

    1.1 查看正在运行的容器

    docker ps
    

    1.2 查看所有容器

    docker ps -a
    

    1.3 查看最近启动的容器

    docker ps -l
    

    1.4 查看容器IP地址

    docker inspect --format='{{.NetworkSettings.IPAddress}}' 54d7c82097a8
    

    1.5 查看端口映射情况

    docker container port  fab11574764e
    

    1.6 查看容器其他信息

    #查看容器每一层的信息
    docker container inspect fab11574764e
    
    #查看容器内进程
    docker top fab11574764e
    
    #查看CPU,内存,存储,网络等使用情况
    docker stats fab11574764e
    -a:输出所有容器统计信息
    --format string:格式化输入信息
    --no-stream:不持续输出,默认实时更新结果
    --no-trunc:不截断输出信息
    
    #查看容器内文件系统的变更
    docker container diff  fab11574764e
    

    二、容器管理

    2.1 创建容器

    1)使用create创建容器

    docker create -it ubuntu:latest
    docker start ubuntu #启动容器
    

    2)使用run命令创建容器

    run相当于先执行create再执行start,创建启动容器一步到位。

    #使用centos:latest镜像创建一个名为c1的容器,并进入终端进行交互
    docker run -it --name=c1 centos:latest /bin/bash #也可以写为
    
    #退出容器但不停止
    ctrl + p + q
    
    :'
    --name:给创建的容器取名,如果不指定name,容器名会随机生成
    centos:latest:镜像名
    /bin/bash:在容器里执行的命令
    -i:开启交互模式
    -t:分配一个终端
    '
    

    2.2 启动容器

    1)启动容器

    #查看所有容器
    docker ps -a
    
    #启动多个容器
    docker start c1 c2
    
    #使用ID启动容器
    docker start 508c6f234df0 #可简写为
    docker start 5
    

    2)启动一个后台运行的容器

    -d选项后台启动容器,此时会执行完输出Hello World命令后容器就会停止,想要容器一直运行需要运行服务。

    docker run -d ubuntu /bin/echo 'Hello World’
    

    2.3 进入容器

    1)容器必须先启动才能进入

    docker start c1
    docker attach c1
    

    进入容器需要注意的是容器必须先启动,像下面这种"短命"容器是进不去的,因为很快就执行完命令停止了!

    docker run centos:latest /bin/echo "Hello World"
    

    如下容器是可以进入的

    #使用交互终端的容器
    docker run -it --name=c1 centos:latest /bin/bash
    
    #可以执行很久的命令的容器
    docker run -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
    
    #运行服务的容器
    docker run -d  nginx:alpine
    
    :'
    使用-d参数,容器启动后会进入后台模式
    '
    

    2)进入容器并启动一个bash

    exec:在容器里执行命令

    docker start c1
    docker exec –it 243c32535da7 /bin/bash
    

    2.4 退出容器

    1)仅退出容器交互终端,但不停止容器运行

    #运行一个容器
    docker run -it --name=c1 centos:latest /bin/bash
    
    #退出容器但不停止容器
    ctrl + p +q
    

    2)停止容器运行,需要进入容器执行

    ctrl + d
    exit
    

    2.5 停止容器

    1)停止正在运行的容器

    docker stop d56146c41f3a #可简写为
    docker stop d
    

    2)停止所有正在运行的容器

    kill:强行终止容器

    docker kill $(docker ps -a -q)
    

    4)暂停,恢复容器

    docker pause c1
    docker unpause c1
    

    容器停止后再启动数据是不会丢失的,在一个运行的容器创建文件,停止该容器再启动,文件还是存在的。

    2.5 导出容器

    1)导出容器

    #运行一个容器,名为c1
    docker run -it --name=c1 centos:latest /bin/bash
    
    #将名为c1容器进行打包
    docker export -o centos-httpd.tar c1 #也可写为
    docker export c1 > centos-httpd.tar
    
    #查看导出容器的大小
    du –sh centos-httpd.tar
    ll –sh
    

    2)导入容器

    将容器导入为镜像,-m为备注,镜像取名为centos-httpd,v1为标签名方便区分

    docker import -m httpd centos-httpd.tar centos-httpd:v1
    
    #查看备注,用于查看-m参数效果
    docker history centos-httpd:v1
    

    image-20210926183310811

    导出容器是为了方便进行备份或迁移

    三、容器使用

    3.1 查看日志

    docker logs -f ce554267d7a4
    
    :'
    -details:打印详细信息
    -f:持续保持输出
    -since string:从某个时间开始的日志
    -tail string:输出最近的日志
    -t:显示时间戳信息
    -untul string:输出某个时间之前的日志
    '
    

    3.2 复制文件

    将宿主机路径的1.txt文件复制到名为c1容器的/tmp路径下

    docker cp  1.txt  c1:/tmp/
    

    3.3 端口映射

    我们有时候需要从外部访问容器服务,这时候就需要将容器的端口映射到宿主机上,让我们能够通过宿主机访问到容器服务。

    1)将容器的80端口映射到随机宿主机端口

    dokcer run -it -p 80 --name=c1 centos:latest /bin/bash
    

    宿主机随机端口范围:49000~49900

    2)将容器的80端口映射到宿主机的80端口

    #左边的80是宿主机端口,右边80是容器端口
    dokcer run -it -p 80:80 --name=c1 centos:latest /bin/bash
    

    3)映射到指定地址的任意端口

    适用于多网卡多IP地址的服务器

    dokcer run -it -p 10.154.0.110::80 --name=c1 centos:latest /bin/bash
    
    #映射到指定地址的指定udp端口
    docker run -d -p 10.154.0.110:5000:5000/udp training/webapp python app.py
    

    4)-P,大写的P,容器的服务端口映射到宿主机随机端口

    docker run -d -P nginx:alpine
    docker run -d -P training/webapp python app.py
    

    运行webapp容器,可以看到该容器的5000端口随机映射到了宿主机49153端口,访问宿主机该端口后,再来查看容器日志如下

    image-20211001163637198

    5)查看映射的端口配置

    查看naughty_poitras容器映射端口情况

    docker port naughty_poitras
    docker port naughty_poitras 5000
    

    可参考:端口映射

    3.4 自定义容器名

    之前不指定容器名,系统会自动分配一串英文加数字的容器名,使用--name参数为容器自定义命名

    docker run -d -P --name web training/webapp python app.py
    

    使用如下命令验证修改后的容器名,还有容器名是唯一的,不可重名

    docker ps -l
    docker inspect -f "{{.Name}}" 19c841267937
    

    使用docker run命令添加--rm参数时,容器终止后会立刻删除,但不能跟-d同时使用

    docker run --rm --name test01 centos:latest /bin/bash
    

    3.5 容器互联

    顾名思义就是容器的互相访问,通过容器名快速访问而不用指定具体的IP地址,相当于修改/etc/hosts文件。

    使--link参数让容器互联,格式--link name:alias,name是要链接的容器名,alias是别名。

    1)先创建一个新的数据库容器,名为mysql

    docker run -d --name mysql bingozhou/mysql5.7
    

    2)再创建一个web容器与他互联

    docker run -d -P --name web --link mysql:db training/webapp python app.py
    
    :'
    --link mysql:db
    mysql是之前创建的数据库容器
    db是mysql容器的别名
    '
    

    使用docker ps 查看,这一点跟书里的不一样,书上说可以看到db容器的names列有db也有web/db,表示web容器可以链接到db容器,web可以访问db容器的信息,但我这显示完全没有

    image-20211001172002067

    3)验证

    使用--link会更新webapp容器的环境变量,使其能连接到数据库容器mysql

    docker run --rm --name web2 --link mysql:db training/webapp env
    

    image-20211001172140677

    除此之外docker还添加了host信息到web容器的/etc/hosts文件中

    docker run -it --rm --link mysql:db training/webapp cat /etc/hosts
    
    :'
    --rm:该容器运行完命令就自动删除
    '
    

    image-20211001172307339

    这里的/etc/hosts文件是不断更新的,如果mysql容器因为某些原因ip地址改变了,这里webapp容器的hosts文件也会同步改变为mysql新的ip地址。

    3.6 容器时间同步

    让名为c2的容器跟宿主机时间同步

    docker run -it -v /etc/localtime:/etc/localtime #或者
    docker cp -L /usr/share/zoneinfo/Asia/Shanghai c2:/etc/localtime
    

    可参考:容器时间同步

    四、删除容器

    4.1 普通删除

    删除容器前需要停止容器

    #先停止运行的容器,再删除
    docker stop c1
    docker rm c1
    
    :'
    -f:强制删除运行中的容器
    -l:删除容器连接保留容器
    -v:删除容器挂载的数据卷
    '
    

    4.2 强制删除

    docker rm –f ubuntu:18.04
    

    4.3 删除全部

    docker rm -f $(docker ps -a -q)
    

    4.4 删除已停止的容器

    docker container prune
    

    五、容器总结

    关于容器需要注意的是

    1. 镜像是只读文件,是不可写的,相当于模板;
    2. 我们进行操作都是在容器里的,容器运行时带有可写文件层,每执行一个命令就会多一层。
    3. 容器如果没有运行的服务,执行完命令后会直接停止。
    4. 容器停止后再启动,数据是不会丢失的。

    六、参考资料

    《Docker技术入门与实践》第三版
    docker清理命令
    狂神说docker

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    面向对象和面向过程
    视图代理(转帖)
    qt中的多线程(转)
    QT GUI总结
    Qt探秘——谈ui文件的用法
    Qt的Model/View Framework解析
    编程入门指南 v1.4
    设计模式总结(经典)
    地址
    QLayout的属性介绍
  • 原文地址:https://www.cnblogs.com/tz90/p/12233993.html
Copyright © 2020-2023  润新知