Docker
(191 条消息) Failed to deploy 'Compse: docker'_weixin_34253539 的博客-CSDN 博客
为什么使用 Docker
Docker 容器入门 - 惨绿少年 - 博客园 (cnblogs.com)
具体信息可以参考上面这篇文章
docker 也是一种虚拟化的方式
传统的虚拟机 是虚拟出客户机 然后操作应用程序
容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因 此容器要比传统虚拟机更为轻便。
安装及环境搭建
首先需要一个宿主机环境 可以是服务器 也可以是虚拟机
但对配置有一定的要求 2C2G 以上 Linux 的操作系统即可
首先安装一些工具 :
sudo apt-get install ca-certificates curl gnupg lsb-release
接下来安装官方的 GPG key:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
将 Docker 的苦添加到 apt 资源中
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
最后再更新一下 apt
sudo apt update
安装 Docker CE 版本:
sudo apt install docker-ce
检查是否安装成功
docker --version
命令权限不足
注意:如果显示权限不足,需要将用户添加到 docker 的用户组中
例如将 ahbng 添加到用户组 然后退出命令行 重新进入生效
sudo usermod -aG docker ahbng
配置镜像源
创建或修改 /etc/docker/daemon.json 文件
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://cr.console.aliyun.com",
"https://mirror.ccs.tencentyun.com"
]
}
重启 docker 服务使配置生效:
systemctl daemon-reload
systemctl restart docker.service
查看配置是否成功:
docker info
仓库 镜像 容器
| 概念 | 说明 |
|---|---|
| 仓库 | 远程的代码管理仓库 保存了各种镜像文件 |
| 镜像 | 创建容器的模板 类 |
| 容器 | 一个镜像的实例化 实际运行的实体 对象 |
常用命令
镜像相关操作
搜索镜像
docker search 仓库/镜像名称 #默认仓库是docker hub
拉取镜像
docker pull 镜像名:版本
查看镜像
docker images
查看镜像详情
删除镜像
docker rmi 镜像id / 镜像名称:tag
容器相关操作
创建容器
docker run 参数 镜像名称:版本
| 参数 | 说明 |
|---|---|
| -it | 进入交互模式 一般用于交互式容器 比如 centos 等系统 |
| -d | 后台启动此容器 |
| -p | 参数用于将容器的端口暴露给宿主机端口 格式:host_port:container_port 或者 host_ip:host_port:container_port |
| -v | 参数用于挂载一个 volume,可以用多个-v 参数同时挂载多个 volume |
| --name | 给容器重命名 |
| /bin/bash | 交互方式为 shell 终端 |
查看容器
docker ps -a #查看全部容器
发布镜像到远程仓库
重新为发送的镜像打标签
docker tag ubuntu-java-file:latest 用户名/仓库名称:版本
登录远程仓库的账号
docker login -u 用户名
然后输入密码
上传镜像
docker push 用户名/仓库名称:版本
搜索远程仓库的镜像
docker search 用户名/仓库名称
docker 远程访问(IDEA 方式)
编辑 docker.service文件, 添加 tcp 端口
sudo vim /etc/systemd/system/multi-user.target.wants/docker.service
修改完成后,重启 Docker 服务,如果是云服务器,记得开启 2375 TCP 连接端口:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
在配置中填写虚拟机的 ip 地址和开放的端口号
构建成功
数据管理
数据卷 即文件目录的映射
- 容器的数据持久化
- 外部机器和容器通信
- 容器之间的通信
配置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件) ... 镜像名:tag [交互方式]
注意事项
- 目录必须是绝对路径
- 如果目录不存在 会自动创建
- 可以挂载多个数据卷
示例
#挂载单目录
docker run -it --name c1 -v /root/volume:/root/volum_container centos:7
#挂载多目录
docker run -it --name c2 -v /root/data:/root/data -v /root/data1:/root/data1
centos:7
Dockerfile
Docker 镜像制作
# 将容器转换成镜像,注意:数据卷不会写到镜像
docker commit 容器ID或容器名 镜像名称:版本号
# 将镜像压缩成文件
docker save -o 文件名称 镜像名称:版本号
# 将压缩文件转换成镜像
docker load -i 压缩文件名称
容器转为镜像
docker commit 121332 mytomcat:1.0
docker save -o mytomcat.tar mytomcat:1.0
docker load -i mytomcat.tar
--author 指定修改作者, --message 记录修改内容,这和 git 版本控制像相似。
注意:
-
- 使用 docker commit 命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并 不会这样使用。
-
- 首先,如果值很小的在容器内进行文件操作不会有太多影响,如果是安装软件包、编译构建,那么 会有大量的无关内容添加进来,如果没有清理,那么镜像会比较臃肿。
-
- 此外,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜 像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得 知。
-
- 而且,镜像时分层存储的文件系统,除当前层可以被修改外,其他层都是不变的,如果反复的对镜 像进行修改,会让镜像越来越臃肿。
-
- docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。
如果 要定制镜像,应该使用 Dockerfile 来完成。
FROM # 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER # 镜像维护者的姓名混合邮箱地址
RUN # 容器构建时需要运行的命令
EXPOSE # 当前容器对外保留出的端口
WORKDIR # 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV # 用来在构建镜像过程中设置环境变量
ADD # 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY # 类似ADD,拷贝文件和目录到镜像中!
VOLUME # 容器数据卷,用于数据保存和持久化工作
CMD # 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最后一个生效!
ENTRYPOINT # 指定一个容器启动时要运行的命令!和CMD一样
ONBUILD # 当构建一个被继承的DockerFile时运行命令 父镜像在被子镜像继承后 父镜像的ONBUILD被触发
使用 Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置、文件。
如果我们可以把每一层修改、安装、构建、操 作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建 透明性的问题、体积的问题就都会解决。
这个脚本就是 Dockerfile。
Dockerfile 概述 Dockerfile 是一个文本文件 包含了一条条的指令 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
对于开发人员:可以为开发团队提供一个完全一致的开发环境
对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工 作了
对于运维人员:在部署时,可以实现应用
Docker 容器入门 - 惨绿少年 - 博客园 (cnblogs.com)