Docker 容器管理

发布时间:2024年01月06日

查看提示:

docker container ls --help

docker 运行:

docker container run \
    -i -t \
    ubuntu /bin/bash

run = create + start

docker 连接 attach
在容器内执行命令:

# 重启容器
docker container restart shiyanlou01

# 执行命令
docker container exec shiyanlou01 echo "test_exec"

docker 删除之前创建的所有容器

docker container rm -f $(docker container ls -aq)

该命令的解释为从一个容器的修改中创建一个新的镜像。例如,我们运行一个容器,然后在其中创建一个文件,最后使用 commit 命令:

# 使用 run 创建运行一个新命令
docker container run \
    --name shiyanlou001 \
    -it busybox /bin/sh

# 在运行的容器中创建两个文件,test1 和 test2
touch test1 test2

# 使用 ctrl + p  及  ctrl + q 键退出

# 使用提交命令,提交容器 shiyanlou001 的修改到镜像 busybox:test 中
docker container commit shiyanlou001 busybox:test

# 查看通过提交创建的镜像
docker image ls busybox

根据Dockerfile构建镜像,并运行

一个基本的Dockerfile:

# 指定基础镜像
FROM ubuntu:14.04

# 维护者信息
MAINTAINER shiyanlou/shiyanlou001@simplecloud.cn

# 镜像操作命令
RUN \
    apt-get -yqq update && \
    apt-get install -yqq apache2

# 容器启动命令
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

构建一个镜像:

# 首先创建目录并切换目录
mkdir /home/shiyanlou/test1 && cd /home/shiyanlou/test1

# 编辑 Dockerfile 文件,默认文件名为 Dockerfile,也可以使用其它值,使用其它值需要在构建时通过 `-f` 参数指定,这里我们使用默认值。并在其中添加上述示例的内容。
vim Dockerfile

# 使用 build 命令,`-t` 参数指定新的镜像,. 是基于该目录下的 Dockerfile 构建
docker image build -t shiyanlou:1.0 .

运行该镜像:

# 使用 -p 参数将本机的 8000 端口映射到容器中的 80 端口上。
docker container run \
    -d -p 8000:80 \
    --restart=always \
    --name shiyanlou002 shiyanlou:1.0

删除镜像:

# Management Commands
docker image rm ubuntu:latest

关于卷

创建卷

docker volume create volume1

挂载卷

docker container run \
    -it --name shiyanlou002 \
    --mount type=volume,src=volume1,target=/volume1 \
    --rm ubuntu /bin/bash

上述操作,我们分别运行了两个容器,并分别挂载了一个卷,还可多次使用该参数挂载多个卷或目录。并且对于这两个容器来说,由于我们使用的是同一个卷,所以他们将共享该数据卷,但是对于多个容器共享数据卷时,需要注意并发性。大家可以分别连接到两个容器中,操作数据,验证其是同步的,这里就不再详细演示了。

docker container run \
    -it \
    --mount type=bind,src=/home/shiyanlou,target=/home/shiyanlou \
    --name shiyanlou004 \
    --rm ubuntu /bin/bash

绑定修改,修改Docker内文件的同时,将修改外部文件。
临时文件:

docker run \
    -it \
    --mount type=tmpfs,target=/test \
    --name shiyanlou008 \
    --rm ubuntu bash

容器之间共享数据:

# 创建一个名为 vdata 的数据卷
docker volume create vdata

# 创建一个挂载了 vdata 的容器,这个容器就是数据卷容器
docker container run \
    -it \
    -v vdata:/vdata \
    --name ShiyanlouVolume ubuntu /bin/bash

# 在 /vdata 目录下创建一个文本文件
echo "I am ShiyanlouVolume" > /vdata/f.txt

同样的,我们执行上述操作,创建容器 test2。

# 创建容器 test1
docker container run \
    -it \
    --volumes-from ShiyanlouVolume \
    --name test1 ubuntu /bin/bash

# 查看 vdata 目录是否存在
ls -dl /vdata/

# 创建一个文件,并写入内容
echo "I am test1" > /vdata/test1.txt
# 创建容器 test2
docker container run \
    -it \
    --volumes-from ShiyanlouVolume \
    --name test2 ubuntu /bin/bash

# 查看 vdata 目录是否存在
ls -dl /vdata/

# 创建一个文件,并写入内容
echo "I am test2" > /vdata/test2.txt

最后结果如下:在这里插入图片描述

容器备份:

docker container run \
   --volumes-from ShiyanlouVolume \
   -v /home/shiyanlou/backup:/backup \
   ubuntu tar cvf /backup/backup.tar /vdata/

--volumes-from ShiyanlouVolume 使得备份容器继承容器 ShiyanlouVolume 的数据卷。
-v /home/shiyanlou/backup:/backup 把 /home/shiyanlou/backup 目录采用绑定挂载的方式,挂载到容器的 /backup 目录上。
tar cvf /backup/backup.tar /vdata 容器中执行了这么一条压缩归档命令,将 /vdata 中的全部数据打包到了 /backup/backup.tar,而刚刚的数据绑定,使得整个压缩包存在于主机中,从而达到了数据备份的效果。

容器恢复

docker container run \
   --volumes-from ShiyanlouVolume \
   -v /home/shiyanlou/backup:/backup \
   ubuntu tar xvf /backup/backup.tar -C /

删除容器

# 暂停所有运行中的容器
docker container stop $(docker container ls -q )

# 删除所有的容器
docker container rm $(docker container ls -aq )

桥接网络

# 查看 bridge 网络的详细信息,并通过 grep 获取名称项
docker network inspect bridge | grep name

# 使用 ifconfig 查看 docker0 网络
ifconfig

默认情况下,我们创建一个新的容器都会自动连接到 bridge 网络。

查看网桥网络:

docker network inspect bridge
ifconfig (容器内部,若无函数,则采用apt update && apt install net-tools)

在这里插入图片描述
可以看到 docker0 的默认网段 Subnet 项。我们可以尝试创建一个容器,该容器会自动连接到 bridge 网络,例如我们创建一个名为 shiyanlou001 的容器:

docker container run --name shiyanlou001 -itd ubuntu /bin/bash
# 这个命令默认使用 --network bridge 
文章来源:https://blog.csdn.net/weixin_43794095/article/details/135366649
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。