容器指南之容器架构及常用指令

时间:2022-12-05 19:03:15

1.Docker 系统架构

Docker daemon:守护进程。通过 docker daemon 命令启动,它负责容器的创建、运行和监控,还负责镜像的构建和储存。

Clinet:客户端。通过 HTTP 和 Docker 守护进程通信。

Registry:寄存服务。负责存储和发布镜像。 

容器指南之容器架构及常用指令

1.1.底层技术

cgroups,负责管理容器使用的资源(例如 CPU 和内存的使用)。

namespace,负责容器之间的隔离,确保系统的其他部分与容器的文件系统、主机名、用户、网络和进程都是分开的。

1.2.周边技术

网络连接,通过 Docker 的联网插件结构,用户可以用其他方案取代 Overlay 驱动程序。

服务发现,解决方案包括 Consul、SkyDNS。

服务编排和群集管理, Kubernets。

1.3.Dockerfile 指令

ADD,从构建环境的上下文或远程 URL 复制文件到镜像。添加本地归档文件会自动解压。一般使用相对简单的 COPY 指令复制构建文件和目录。

CMD,当容器启动时执行指定的指令。如果定义了 ENTRYPOINT ,该指令将被解释为 ENTRYPOINT 的参数(确保使用 exec 格式)。

COPY,复制文件到镜像。它有2中方式,COPY src dest 以及 COPY [ "src","dest" ],如果路径中有空格,必须使用 JSON 数组的格式。

ENTRYPOINT,设置一个于容器启动时运行的可执行文件。

ENV,设置镜像内的环境变量,这些变量可以被随后的指令引用。

EXPOSE,向 Docker 表示该容器将会有一个进程监听所指定的端口。

FROM,设置 Dockerfile 使用的基础镜像,随后的指令皆执行于这个镜像上。

MAINTAINER,镜像作者的元数据。

ONBUILD,指定当镜像被用作另一个镜像的基础镜像时将会执行的指令。

RUN,在容器执行指定的指令,并把结果保存下来。

USER,设置任何后续的 RUN、CMD 或 ENTRYPOINT 指令执行时所用的用户。

VOLUME,指定为数据卷的文件或目录。如果该文件或目录已经在镜像中存在,当容器启动时,它会被复制到这个卷;如果提供了多个参数,会被解释成多个数据卷。

WORKDIR,对任何后续的 RUN、CMD、ENTRYPOINT、ADD 或 COPY 指令设置工作目录。

1.4.容器互联

其中 -p 8000:80 将主机的 8000 端口转发到容器的 80 端口。或者可以使用 -P 选项让 Docker 自动选择一个主机上未使用的端口。

docker run -d -p 8000:80 nginx
ID=$(docker run -d -P nginx)
docker port $ID 80

容器指南之容器架构及常用指令

容器指南之容器架构及常用指令

容器间的连接主机网络无法看见。连接的初始化通过 docker run 传入 --link CONTAINER:alias 参数,其中 CONTAINER 是目标容器的名称,而 alias 是主容器用来称呼目标容器的一个本地名称。

使用 Docker 的连接也会把目标容器的别名和 ID 添加到主容器的 /etc/hosts,允许主容器通过名称找到目标容器。

docker run -d --name myredis redis
docker run --link myredis:redis debian env

容器指南之容器架构及常用指令

默认情况下,无论是否已经建立了 显式连接,容器之间可以相互通信。如果想要防止尚未连接的容器能够互联,可以在启动 Docker 守护进程式加上 --icc=false 和 --iptables。

2.常用的容器指令

2.1.存储相关

docker system df
docker system prune
docker system prune -a
docker image ls -a
docker image rm <name_or_id>
docker container ls -a
docker container stop <name_or_id>
docker container rm <name_or_id>

2.2.网络相关

docker network ls
docker network rm <name_or_id>

2.3.执行相关

docker volume ls
docker exec mysql /usr/bin/mysqldump -u root -pmysecret mydb > backup.sql
docker exec mysql /usr/bin/mysqldump -u root -pmysecret -r mydb | Set-Content backup.sql
docker cp mycontainer:/some/file ./host/directory
docker volume rm <name>
docker volume prune
docker system prune -a --volumes
docker exec -it <name> bash
docker exec -it <name> sh

2.4.centos删除docker0虚拟网卡

# 停止docker服务
service docker stop
# 用ip命令使docker0网卡down掉
ip link set dev docker0 down
# 删除网卡
brctl delbr docker0

3.参考资料

容器指南之第一个容器  ​​https://blog.51cto.com/waringid/5904849​