查看提示:
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:
# 指定基础镜像
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