【docker】docker工具的基本使用

1、初识docker

开发人员写的代码会接触到好几个环境:开发环境、测试环境、生产环境
【docker】docker工具的基本使用_第1张图片

1.1、docker概念

  • docker是一个开源的应用容器引擎
  • 诞生于2013年初,基于go 语言
  • docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何linux机器上
  • docker容器是使用沙箱机制,相互隔离
  • 容器性能开销极低
  • docker从17.3版本后分为CE(社区版)和EE(企业版)
    docker是一种容器技术,解决软件跨环境迁移的问题

1.2、安装docker

docker可以运行在Mac、Windows、CentOS、UBUNTU等操作系统,本文安装介绍在CentOS 7上
docker官网

# 1、yum包更新到最新
yum update
# 2、安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、安琥脏docker,出现输入界面都按 y
yum install -y docker-ce
# 5、查看docker版本,验证是否安装成功
docker -v

1.3、docker架构

【docker】docker工具的基本使用_第2张图片

  • 镜像(Image):docker容器相当于一个root文件系统
  • 容器(Container):镜像与容器的关系,就像面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
  • 仓库(Repository):仓库可以看成一个代码控制中心,用来保存镜像

1.4、配置docker镜像加速器

默认情况下,将来从docker hub(https://hub.docker.com/)上下载docker镜像,太慢,一般都会配置镜像加速器

  • 阿里云(加速器地址每个人是不同)
    【docker】docker工具的基本使用_第3张图片

  • 操作文档

  1. 安装/升级Docker客户端
    推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce

  2. 配置镜像加速器
    针对Docker客户端版本大于 1.10.0 的用户,您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://6e2gza2z.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2、docker命令

2.1、docker服务相关的命令

# 启动docker服务
systemctl start docker
# 停止docker服务
systemctl stop docker
# 重启docker服务
systemctl restart docker
# 查看docker服务状态
systemctl status docker
# 开机启动docker服务
systemctl enable docker

2.2、docker镜像相关的命令

# 查看镜像(本地)
docker images
docker images -q 				# 查看所有镜像ID
# 删除镜像(本地)
docker rmi 镜像ID
docker rmi `docker images -q` 	# 删除所有本地镜像
# 搜索镜像(远程)
docker search 镜像名称
# 拉取镜像(远程)
docker pull 镜像名称 			# 下载最新版本
 docker pull 镜像名称 :5.0 		# 指定下载的版本号

2.3、docker容器相关的命令

# 查看容器
docker ps # 查看正在运行的容器
docker ps -a # 查看所有的容器
# 创建并启动容器
docker run 参数
- 参数说明:
    -i : 交互式操作
    -t : 终端
    -d : 后台模式运行,容器创建后,docker exec 进入容器;退出容器后,容器不会关闭
    -it : 交互式容器,容器创建后自动进入;退出容器后,自动关闭
    -id : 守护式容器
    --name : 为创建的容器命名
   
# 进入容器
docker exec  参数 # 此命令退出容器,容器不会关闭
# 启动容器
docker start 容器名称
# 停止容器
docker stop 容器名称
# 删除容器
docker rm 容器名称 # 删除前需要先停止容器
# 查看容器状态
docker inspect 容器名称

3、docker容器数据卷

3.1、数据卷的概念及作用

  1. 概念

    • 数据卷是宿主机中的一个目录或者文件
    • 当容器目录和数据卷目录绑定后,对方的修改会同步
    • 一个数据卷可以被多个容器同时挂载
    • 一个容器也可以被挂载多个数据卷
      【docker】docker工具的基本使用_第4张图片
  2. 作用

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

3.2、配置数据卷

创建启动容器时,使用 -v 参数 设置数据卷

docker run ...  -v 宿主机目录:容器内目录 ...
# 注意:
  1. 目录必须为绝对路径
  2. 如果目录不存在,自动创建
  3. 可以挂载多个数据卷
# docker run -it --name=c1  -v /root/data:/root/data_container [-v /root/data2:/root/data2_container] centos:7 

3.3、配置数据卷容器

1. 创建启动 c3 数据卷容器,使用 -v 参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7
2. 创建启动 c1 c2 容器,使用 --volumes-from 参数 设置数据卷
docker run -it --name=c1 --volume-from c3 centos:7 
docker run -it --name=c2 --volume-from c3 centos:7

4、docker应用部署

4.1、mysql部署

  • 容器内的网络服务和外部机器不能直接通信
  • 外部机器和宿主机可以直接通信
  • 宿主机和容器可以直接通信
  • 当容器中的网络服务需要被外部机器访问时,可以将容器中提供的服务端口映射到宿主机的端口上,外部机器访问宿主机的该接口,从而间接访问容器的服务
  • 这种操作称为:端口映射
    【docker】docker工具的基本使用_第5张图片
1. 搜索mysql镜像
docker search mysql
2. 拉取mysql镜像
docker pull mysql
3. 创建mysql目录
mkdir ~/mysql
cd ~/mysql
4. 创建mysql容器,设置端口与目录映射
docker run -id -p 3306:3306 --name=mysql_5.7 -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
- 参数说明:
  1. -p 3306:3306 : 将容器的3306端口映射到宿主机的3306端口
  2. -v /root/mysql/conf:/etc/mysql/conf.d : 将主机目录下的conf/my.cnf 挂载到容器的/etc/mysql/conf.d
  3. -v /root/mysql/logs:/logs : 将主机目录下的logs目录挂载到容器的/logs 日志目录
  4. -v /root/mysql/data:/var/lib/mysql : 将主机目录下的data目录挂载到容器的/var/lib/mysql目录下
  5. -e MYSQL_ROOT_PASSWORD=123456 : 初始化root用户的密码
5. 进入mysql容器
docker exec -it Ljy_mysql /bin/bash
6. 登录MySQL数据库
mysql -uroot -p 

4.2、Tomcat部署

1. 搜索tomcat镜像
docker search tomcat
2. 拉取tomcat镜像
docker pull tomcat
3. 创建tomcat目录
mkdir ~/tomcat
cd ~/tomcat
4. 创建tomcat容器,设置端口与目录映射
docker run -id --name=tomcat_lastest -p 8080:8080 -v /root/tomcat:/usr/local/tomcat/webapps tomcat
- 参数说明:
 1. -p 8080:8080 : 将容器的8080端口映射到宿主机的8080端口
 2. -v /root/tomcat:/usr/local/tomcat/webapps : 将主机中当前目录挂载到容器的webapps

5、dockerfile

5.1、docker镜像原理

  • docker镜像由特殊的文件系统叠加而成
  • 最低端是boorfs,并使用宿主机的bootfs
  • 第二层是root文件系统的rootfs,称为base image
  • 然后在往上可以叠加其他的镜像文件
  • 统一文件系统技术能够将不同的层西整和成一个文件系统,为这些层提供一个统一的视角,这样就隐藏了多层的存在,在用户的角度来看,只存在一个文件系统
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最低层的镜像称为基础镜像
  • 当一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器
    【docker】docker工具的基本使用_第6张图片
    镜像制作
1. 容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称

5.2、dockerfile概念及作用

  • dockerfile是一个文本文件
  • 包含了一条条指令
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 开发人员:可以为开发团队提供一个完全一致的开发环境
  • 测试人员:可以直接拿开发时所构建的镜像或者提供dockerfile文件构建一个新的镜像开始工作了
  • 运维人员:在部署时,可以实现应用的无缝移植

链接: Dochub网址

5.3、dockerfile关键字

关键字 作用 备注
FROM 指定父镜像 指定dockerfile基于那个image构建
MAINTAINER 作者信息 用来标明这个dockefile谁写的
LABEL 标签 用来标明dockerfile的标签,可以使用Label代替Maintainer,最终都是在 docke image基本信息中可以查看
RUN 执行命令 执行一段命令默认是/bin/sh格式:RUN command或者RUN [“command”,“param1”,“param2”]
CMD 容器启动命 令 提供启动容器时候的默认命令和ENTRYPOINT配合使用,格式CMD command param1 param2 或者 CMD [“command”, “param1”,“param2”]
ENTRYPOINT 入口 一般在制作一些执行就关闭的容器中会使用
COPY 复制文件 build的时候复制文件到image中
ADD 添加文件 build的时候添加文件到image中不仅仅局限于当前build上下文,可以来源 于远程服务
ENV 环境变量 指定build时候的环境变量,可以在启动的容器的时候通过 -e 覆盖格式ENV name=value
ARG 构建参数 构建参数,只在构建的时候使用的参数;如果有ENV那么ENV的相同名字的 值始终覆盖arg的参数
VOLUME 定义外部可 以挂载的数 据卷 指定build的image那些目录可以启动的时候挂载到文件系统中启动容器 的时候使用-v绑定格式VOLUME [“目录”]
EXPOSE 暴露端口 定义容器运行的时候监听的端口启动容器的使用-P来绑定暴露端口格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR 工作目录 指定容器内部的工作目录;如果没有创建则自动创建;如果指定/使用的是绝对地址;如果不是/开头,那么是在上一条workdir的路径的相对路径
USER 指定执行用 户 指定build或者启动的时候,用户在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK 健康检查 指定监测当前容器的健康监测的命令;基本上没用,因为很多时候应用本身有健康监测机制
ONBUILD 触发器 当存在ONBUILD关键字的镜像作为基础镜像的时候,当执行FROM完成之后会执行ONBUILD的命令;但是不影响当前镜像,用处也不怎么大
STOPSIGNAL 发送信号量 到宿主机 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL 指定执行脚 本的shell 指定RUN CMD ENTRYPOINT执行命令的时候使用的shell

5.4、案例

自定义centos7

要求:
	1. 默认登录路径为/var
	2. 可以使用vim

实现步骤:
	1. 定义父镜像:FROM centos:7
	2. 定义作者信息:MAINTAINER LJY
	3. 执行安装vim命令:RUN yum install -y vim
	4. 定义默认的工作目录:WORKDIR /usr
	5. 定义容器启动执行的命令:CMD /bin/bash
	6. 通过dockerfile构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本

6、docker服务编排

6.1、服务编排

按照一定的业务规则批量管理容器

6.2、docker compose 概述

docker compose 是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建、启动和停止。
使用步骤:
1. 利用 dockerfile 定义运行环境镜像
2. 使用 docker-compose.yml 定义组成应用的服务
3. 运行 docker-compose up 启动应用

6.3、docker compose 安装

1. Linux 上我们可以从 Github 上下载它的二进制包来使用
curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2. 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
3. 查看版本信息
docker-compose -version

# 卸载时,删除文件即可
rm /usr/local/bin/docker-compose

7、docker私有仓库

7.1、私有仓库的搭建


1、拉取私有仓库篌像 
docker pull registry]
2、启动私有仓库容器
docker run -id --name=r eg-i stry -p 5000:5000 registry
3、打开浏览器输入地址http://私有仓库服务器ip: 5000/v2/_catalog,看到{"repositories" :[]}表示私有仓库搭建成功
4、修改daemon.json
vim /etc/docker/daemon.json
 # 在上述文件中添加一个key,保存退出。此步用于让docker信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实"ip
{"'insecure-registries"[”私有仓库服务器ip: 5000]}
5、重启docker服务 
systemctl restart docker 
docker start registry

7.2、将镜像上传至私有仓库

1. 标记镜像为私有仓库镜像
docker tag centos:7 私有仓库ip:5000/centos7
2. 上传标记的镜像
docker push 私有仓库ip:5000/centos7

7.3、从私有仓库拉取镜像

docker pull 私有仓库ip:5000/centos7

你可能感兴趣的:(docker,容器,压力测试)