4

容器指南之容器架构及常用指令_虚拟的现实的技术博客_51CTO博客

 1 year ago
source link: https://blog.51cto.com/waringid/5913145
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1.Docker 系统架构

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

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

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

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

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
容器指南之容器架构及常用指令_容器常用指令_02
容器指南之容器架构及常用指令_容器常用指令_03

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

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

docker run -d --name myredis redis
docker run --link myredis:redis debian env
容器指南之容器架构及常用指令_容器常用指令_04

默认情况下,无论是否已经建立了 显式连接,容器之间可以相互通信。如果想要防止尚未连接的容器能够互联,可以在启动 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​


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK