容器指南之容器架构及常用指令
作者:快盘下载 人气: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.参考资料
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>
docker network rm <name_or_id>
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
service docker stop
# 用ip命令使docker0网卡down掉
ip link set dev docker0 down
# 删除网卡
brctl delbr docker0
容器指南之第一个容器https://blog.51cto.com/waringid/5904849
加载全部内容