docker相关

docker命令

docker官方网站

daemon服务命令相关

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

contain容器命令相关

查看容器:docker ps (查看正在运行的容器) -a (查看所有容器)
创建容器:docker run -P --name=xxx (容器名字) xxxx(镜像及版本号) /bin/bash(初始化脚本并进入)
-P内容有:
-i(一直运行,不指定的话,没有客户端连接就会断开,退出后会容器会自动关闭,交互式容器) 
-t(分配伪终端用来输入命令) 
-d(退出后不会自动关闭,守护式容器)
进入容器:docker exec -it xxx(名字) /bin/bash
退出容器:exit
启动容器:docker start xxx(容器名称)
停止容器:docker stop xxx(容器名字)
删除容器:docker rm xxx(容器名称),已经启动的容器不会被删除
删除全部容器:docker rm `docker ps -aq`
查看容器信息:docker inspect xxx(容器名称)

image镜像命令相关

查看:docker images
查看所有镜像id:docker images -q
搜索:docker search xxxx (文件)【例如:redis】
拉取(下载):docker pull xxx(文件:例如【redis】)  xxx(版本号【不指定为最新latest】指定版本 :3.2)
删除:docker rmi xxx(id)或者 名字:版本号
删除全部镜像:docker rmi `docker images -q`

docker 数据卷相关

数据卷概念

  • 数据卷是宿主机中的一个目录或者文件(只有将宿主机中的目录挂载到容器的目录中 这个宿主机中的目录就是数据卷)
  • 容器目录或者数据卷目录绑定后,任何一方的修改会立刻改变目录里的内容
  • 一个数据卷可以被多个容器目录挂载
  • 一个容器可以挂载多个数据卷

功能

  • 容器数据持久化
  • 外部机器与容器间进行通信
  • 容器之间交换数据

配置数据卷

  1. 创建自动容器时,使用-v参数 设置数据卷,挂载多个目录 则多写几个-v即可
docker run .... -v 宿主机目录(文件):容器内目录(文件)

注意:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 可以挂载多个数据卷

数据卷容器(实现多个容器间交换数据)

  1. 创建启动c3数据卷容器
docker run -it --name=xxx -v /volume 镜像 /bin/bash
(不指定volume【自己命名】的话,系统会自动分配一个目录)
  1. 创建c1 c2容器,使用–volumes-from 参数 设置数据卷
docker run -it --name=c1 --volumes-from c3 xxxx 镜像 /bin/bash
docker run -it --name=c2 --volumes-from c3 xxxx 镜像 /bin/bash

docker的应用部署

部署Mysql

  1. 搜索mysql镜像
docker search mysql
  1. 拉取mysql镜像
docker pull mysql(:5.6)
  1. 创建容器、操作容器、端口映射
# 在root/dk_data目录下创建mysql目录用于存储mysql数据信息
mkdir -p /root/dk_data/mysql
cd /root/dk_data/mysql
docker run -id \
-p 3307:3306 \ 
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456  \
mysql
  • -p 3307:3306 将容器3306端口映射到宿主机3307端口
  • -v $PWD/conf:/etc/mysql/conf.d 将主机当前目录下conf/my.cnf 挂载到/etc/mysql/my.cnf 配置目录
  • -v $PWD/logs:/logs 将主机当前目录下的logs目录挂载到容器的/logs目录下,日志目录
  • $PWD/data:/var/lib/mysql 数据目录
  • -e MYSQL_ROOR_PASSWORD=123456 初始化root用户密码

部署Tomcat

docker search tomcat

docker pull tomcat

mkdir -p /root/dk_data/tomcat
cd /root/dk_data/tomcat

docker run -itd --name=c_tomcat -p 8080:8080 -v $PWD:/usr/local/tomcat/webapps tomcat

-p 8080:8080 容器8080映射到主机8080端口
-v $PWD:/usr/local/tomcat/webapps 主机当前目录挂载到容器的webapps

部署Nginx

docker search nginx

docker pull nginx

mkdir -p /root/dk_data/nginx
cd /root/dk_data/nginx

docker run -itd --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

部署redis

docker search redis

docker pull redis

docker run -itd --name=c_redis -p 6379:6379 redis

外部机器连接redis
reids-cli.exe -h xxxx -p 6379

Dockerfile

docker镜像的本质是什么

  • 本质是一个分层的文件系统

镜像制作

  1. 容器转镜像(镜像无法直接传,需要转成压缩文件)

     docker commit 容器id 镜像名称:版本号 (目录挂载的文件不会写入镜像内部)
     docker save -o 压缩文件名称 镜像名称:版本号 (压缩文件)
     docker load -i 压缩文件名称 (解压文件)
    
  2. Dockerfile 制作镜像文件(步骤)

vim 文件 将以下写入文件里

  • 定义父镜像FROM
  • 定义作者信息 MAINTAINER xxxxx
  • 将压缩包添加到容器 ADD 原压缩文件 新名称
  • 定义容器启动执行的命令 CMD xxxx

然后docker build -f xxx(原名称) -t 新名称 得到镜像

docker run -it xxxxx 根据镜像创建容器即可

关键字:

关键字 作用 备注
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

docker 服务编排(Docker Compose)

  • 利用Dockerfile定义运行环境镜像
  • 使用docker-compose.yml 定义组成应用的各服务
  • 运行docker-compose up 启动应用

docker 私有仓库

私有仓库搭建

##仓库服务器
# 1.拉取私有仓库镜像
docker pull registry

# 2.启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 3.打开浏览器 http://私有仓库服务器ip:5000/v2/_catalog 看到json字符串就是搭建成功

## 自己服务器或电脑
# 4. 修改daemon.json 文件 用来信任私有仓库
vim /etc/docker/daemon.json
# 配置添加如下
{"insecure-registries":["ip:5000"]}
# 5. 重启docker服务
systemctl restart docker
docker start registry

上传镜像到私有仓库


docker tag 镜像名称 私有仓库ip:port/xxxx(名字)
docker push 私有仓库ip:port/xxxx

拉取私有镜像到本地

docker pull 私有仓库ip:port/xxxx