Docker 是一个开源的应用容器引擎,基于Go开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,不仅仅可以发布到任何流行的 Linux 机器上,也可以在Windows和MAC上安装,也可以实现虚拟化。容器是完全使用沙箱机制。
Docker 从 17.03(2017.03月) 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
1.17.0.3 版本以后变更版本发布策略,每个季度会发一个stable版本,每月会发edge版本,社区版本从发版本后维护四个月就会停止对版本的维护。
Docker引擎是一个c/s结构的应用
Server(docker daemon):常驻进程
REST API:实现了client和server间的交互协议
CLI:实现容器和镜像的管理,为用户提供统一的操作页面。
containerd:dockerd实际真实调用的还是containerd的api接口(rpc方式实现),containerd是dockerd和runc之间的一个中间交流组件
docker-shim:是一个真实运行的容器的真实垫片载体,每启动一个容器都会起一个新的shim进程,它直接通过指定的三个参数:容器id,boundle目录,运行时二进制(默认为runc)来调用runc的api创建一个容器。
runc:是一个命令行工具端,他根据oci(开放容器组织)的标准来创建和运行容器。实现了容器启停、资源隔离等功能。Docker默认提供了docker-runc实现,事实上,通过containerd的封装,可以在Docker Daemon启动的时候指定runc的实现。
1 安装部署
第一步 删除旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
第二步 配置yum源
安装yum工具: yum install -y yum-utils
下载docker-ce yum源: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
第三步 执行安装
查看所有版本:yum list docker-ce --showduplicates | sort -r
指定版本安装: yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
systemctl enable docker
systemctl start docker
第四步 配置镜像仓库
1. Docker安装完成以后,在/etc/docker/目录下执行
cat > daemon.json << EOF
{
"insecure-registries": [“10.180.210.196"]
}
EOF
systemctl restart docker 重启启动docker时配置生效
2. 登录harbor仓库
docker login 10.180.210.196 然后根据提示输入用户名:admin,密码:Harbor12345
复制代码
2 Docker镜像制作
FROM: 引用基础镜像
格式:FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
通过公有仓库或私有仓库拉取镜像,platform标识系统架构:linux/amd64, linux/arm64, or windows/amd64。
RUN:执行命令
两种格式:RUN <command> (/bin/sh -c on Linux or cmd /S /C on Windows)
RUN ["executable", "param1", "param2"] (exec form)
示例:RUN mkdir /test \
touch /test/hello #多条命令可以使用 \换行连接
ENV:设置环境变量
两种格式:ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2> ...
示例:ENV myName John
ENV myCat fluffy 或者 ENV myName=John myCat=fluffy
EXPOSE: 指定容器运行时监听的端口
格式:EXPOSE <port> [<port>/<protocol>...] #默认为tcp协议
示例:EXPOSE 80/tcp
EXPOSE 80/udp
ADD:将文件从本地或URL中添加到镜像文件系统,本地文件必须在上下文(Dockerfile)的当前目录或子目录。
格式:ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
示例:ADD test.tar.gz / #自动解压
COPY:和ADD指令功能相似,但缺少两个功能点(不能从URL中添加文件,不能自动解压)
CMD:容器启动命令
格式:CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
ENTRYPOINT:容器启动的入口点
格式:ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)
复制代码