Docker入门及安装

130 阅读6分钟

Docker

(191 条消息) Failed to deploy 'Compse: docker'_weixin_34253539 的博客-CSDN 博客

为什么使用 Docker

Docker 容器入门 - 惨绿少年 - 博客园 (cnblogs.com)

具体信息可以参考上面这篇文章

docker 也是一种虚拟化的方式

image.png

传统的虚拟机 是虚拟出客户机 然后操作应用程序

image.png 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因 此容器要比传统虚拟机更为轻便。

安装及环境搭建

首先需要一个宿主机环境 可以是服务器 也可以是虚拟机

但对配置有一定的要求 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

image.png

命令权限不足

注意:如果显示权限不足,需要将用户添加到 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

image.png

仓库 镜像 容器

概念说明
仓库远程的代码管理仓库 保存了各种镜像文件
镜像创建容器的模板 类
容器一个镜像的实例化 实际运行的实体 对象

常用命令

镜像相关操作

搜索镜像

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

image.png

修改完成后,重启 Docker 服务,如果是云服务器,记得开启 2375 TCP 连接端口:

sudo systemctl daemon-reload
sudo systemctl restart docker.service

在配置中填写虚拟机的 ip 地址和开放的端口号

image.png

构建成功

数据管理

数据卷 即文件目录的映射

  1. 容器的数据持久化
  2. 外部机器和容器通信
  3. 容器之间的通信

配置数据卷

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 版本控制像相似。

注意:

    1. 使用 docker commit 命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并 不会这样使用。
    1. 首先,如果值很小的在容器内进行文件操作不会有太多影响,如果是安装软件包、编译构建,那么 会有大量的无关内容添加进来,如果没有清理,那么镜像会比较臃肿。
    1. 此外,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜 像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得 知。
    1. 而且,镜像时分层存储的文件系统,除当前层可以被修改外,其他层都是不变的,如果反复的对镜 像进行修改,会让镜像越来越臃肿。
    1. docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。

如果 要定制镜像,应该使用 Dockerfile 来完成。

FROM   		# 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER  	# 镜像维护者的姓名混合邮箱地址
RUN          	# 容器构建时需要运行的命令
EXPOSE 		# 当前容器对外保留出的端口
WORKDIR 	# 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV 		# 用来在构建镜像过程中设置环境变量
ADD 		# 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY 		# 类似ADD,拷贝文件和目录到镜像中!
VOLUME	 	# 容器数据卷,用于数据保存和持久化工作
CMD		# 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最后一个生效!
ENTRYPOINT 	# 指定一个容器启动时要运行的命令!和CMD一样
ONBUILD 	# 当构建一个被继承的DockerFile时运行命令 父镜像在被子镜像继承后 父镜像的ONBUILD被触发

image.png

使用 Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置、文件。

如果我们可以把每一层修改、安装、构建、操 作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建 透明性的问题、体积的问题就都会解决。

这个脚本就是 Dockerfile。

Dockerfile 概述 Dockerfile 是一个文本文件 包含了一条条的指令 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

对于开发人员:可以为开发团队提供一个完全一致的开发环境

对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工 作了

对于运维人员:在部署时,可以实现应用

Docker 容器技术 (yuque.com)

Docker 容器入门 - 惨绿少年 - 博客园 (cnblogs.com)

docker 中文文档 (coonote.com)

Docker 实战应用 2.pdf