开发人员写的代码会接触到好几个环境:开发环境、测试环境、生产环境
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
默认情况下,将来从docker hub(https://hub.docker.com/)上下载docker镜像,太慢,一般都会配置镜像加速器
安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce
配置镜像加速器
针对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
# 启动docker服务
systemctl start docker
# 停止docker服务
systemctl stop docker
# 重启docker服务
systemctl restart docker
# 查看docker服务状态
systemctl status docker
# 开机启动docker服务
systemctl enable docker
# 查看镜像(本地)
docker images
docker images -q # 查看所有镜像ID
# 删除镜像(本地)
docker rmi 镜像ID
docker rmi `docker images -q` # 删除所有本地镜像
# 搜索镜像(远程)
docker search 镜像名称
# 拉取镜像(远程)
docker pull 镜像名称 # 下载最新版本
docker pull 镜像名称 :5.0 # 指定下载的版本号
# 查看容器
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 容器名称
创建启动容器时,使用 -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
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
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
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
1. 容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称
链接: Dochub网址
关键字 | 作用 | 备注 |
---|---|---|
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 |
自定义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 镜像名称:版本
按照一定的业务规则批量管理容器
docker compose 是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建、启动和停止。
使用步骤:
1. 利用 dockerfile 定义运行环境镜像
2. 使用 docker-compose.yml 定义组成应用的服务
3. 运行 docker-compose up 启动应用
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
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
1. 标记镜像为私有仓库镜像
docker tag centos:7 私有仓库ip:5000/centos7
2. 上传标记的镜像
docker push 私有仓库ip:5000/centos7
docker pull 私有仓库ip:5000/centos7