一、安装Docker
参考阿里云中Docker的安装教程
二、CentOS中常用的命令
1、开启Docker服务的命令
# 查看docker服务状态
systemctl status docker
# 启动docker服务
systemctl start docker
# 停止docker服务
systemctl stop docker
# 重启docker服务
systemctl restart docker
# 设置开机启动docker服务
systemctl enable docker
2、防火墙相关的命令
# 启动防火墙:
systemctl start firewalld
# 查看防火墙状态:
systemctl status firewalld
# 停止防火墙:
systemctl disable firewalld
# 禁用防火墙:
systemctl stop firewalld
# 启动防火墙服务:
systemctl start firewalld.service
# 关闭防火墙服务:
systemctl stop firewalld.service
# 重启防火墙服务:
systemctl restart firewalld.service
# 查看防火墙服务的状态:
systemctl status firewalld.service
# 在开机时启用一个防火墙服务:
systemctl enable firewalld.service
# 在开机时禁用一个防火墙服务:
systemctl disable firewalld.service
# 查看防火墙服务是否开机启动:
systemctl is-enabled firewalld.service
# 查看已启动的防火墙服务列表:
systemctl list-unit-files|grep enabled
# 查看启动失败的防火墙服务列表:
systemctl --failed
# 查看防火墙版本:
firewall-cmd --version
# 查看防火墙帮助:
firewall-cmd --help
# 显示防火墙状态:
firewall-cmd --state
# 查看防火墙所有打开的端口:
firewall-cmd --zone=public --list-ports
# 更新防火墙规则:
firewall-cmd --reload
# 查看防火墙区域信息:
firewall-cmd --get-active-zones
# 查看指定接口所属区域:
firewall-cmd --get-zone-of-interface=eth0
# 拒绝所有包:
firewall-cmd --panic-on
# 取消拒绝状态:
firewall-cmd --panic-off
# 查看是否拒绝:
firewall-cmd --query-panic
三、Docker相关的命令
1、镜像相关的命令
# 查看多有镜像
docker images
# 获取所有镜像ID
docker images -q
# 从DockerHub官网中查询镜像
docker search nginx
# 从DockerHub官网中获取镜像到本地
docker pull nginx
# 从DockerHub官网中获取指定版本镜像到本地
docker pull nginx:7.0
# 删除指定ID的镜像
dokcer rmi id
# 删除所有的镜像
docker rmi `docker images -q`
# 删除所有的镜像
docker rmi $(docker images -q)
镜像信息
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
镜像仓库源 | 镜像标签(版本) | 镜像ID | 镜像创建时间 | 镜像大小 |
1.1 Dockerfile文件创建镜像
# 创建镜像
docker build -t myImages . --network=host 设置访问主机互联网
docker bulid –f dockerfile文件路径 –t 镜像名称:版本
关键字 | 作用 | 备注 |
FROM | 指定父镜像 | 指定dockerfile基于那个image构建 |
MAINTAINER | 作者信息 | 用来标明这个dockerfile谁写的 |
LABEL | 标签 | 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker 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 |
1.2 容器转镜像
docker commit 容器ID 镜像名称:镜像版本
docker save -o 压缩文件名称 镜像名称:镜像版本
docker load -i 压缩文件名称
2、容器相关的命令
# 查看正在运行的容器
docker (container) ps
# 查看所有容器
docker (container) ps -a
# 获取所有容器的ID
docker (container) ps -aq
# 查看正在运行的容器(新版本推荐)
docker container ls
# 查看所有容器(新版本推荐)
docker container ls -a
# 开启容器运行
docker (container) start ID
# 停止容器运行
docker (container) stop ID
# 重启容器
docker (container) restart ID
# 删除容器(运行中的容器无法删除)
docker (container) rm ID
# 删除容器(运行中也可以删除)
docker (container) rm ID -f
# 组合命令,删除或停止容器
docker (container) rm/stop $(docker (container) ps -aq)
# 查看容器的详细信息
docker (container) inspect ID
# 查看容器运行日志(仅一次)
docker (container) logs ID
# 实时查看日志(Ctrl + c 退出日志查看)
docker (container) logs -f ID
# 进入容器控制台 示例:docker (container) exec -it ID /bin/bash
docker (container) exec 参数
# 创建并运行容器 示例: docker run -it --name=c1 nginx /bin/bash
docker (container) run 参数
参数: -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
-it:创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
--name:为创建的容器命名
容器信息
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
容器ID | 创建容器所用镜像 | 容器启动运行的命令 | 容器创建时间 | 容器状态 | 容器的端口信息和使用的连接类型(tcp\udp) | 容器名称 |
STATUS:created(已创建)、restarting(重启中)、running或Up(运行中)、removing(迁移中)、paused(暂停)、exited(停止)、dead(死亡)
四、数据卷
概念:
1、数据卷是宿主机中的一个目录或文件
2、当容器目录和数据卷目录绑定后,对方的修改会立即同步
3、一个数据卷可以被多个容器同时挂载
4、一个容器也可以被挂载多个数据卷
作用:
1、容器数据持久化
2、外部机器和容器间接通信
3、容器之间数据交换
# 创建并启动容器配置数据卷, 可以配置多个,在后面多加 -v
docker run 参数 -v 宿主机文件路径:容器文件路径 ...
# 数据卷容器
docker run 参数 --name=c -v /volume centos
# 绑定数据卷容器
docker run 参数 --name=c1 --volumes-from c centos
五、应用部署
1、mysql部署
docker search mysql
docker pull mysql
docker run -id --name=c_mysql -p 3306:3306 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
2、nginx部署
docker search nginx
docker pull nginx
docker run -id --name=c_nginx -p 80:80 -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/var/log/nginx -v $PWD/html:/usr/share/nginx/html nginx
# 本地测试访问
curl 127.0.0.1:80
3、redis部署
docker search redis
docker pull redis
docker run -id --name=c_redis -p 6379:6379 redis
// 进入redis
docker exec -it ID redis-cli
// 查询默认密码
config get requirepass
// 设置密码
config set requirepass xxxx
4、mongo部署
docker search mongo
docker pull mongo
docker run -id --name=c_mongo -p 27017:27017 mongo
// 进入mongo
docker exec -it ID mongo