说明 :
[] 方括号表示 => 里面的参数可省
grep name 任何查询结果都可以通过 grep 进行筛选
# 注释符
() 命令解释
<> 必填参数
系统 :
安装容器 :
yum install -y epel-relase # 安装依赖
yum install docker-io # 安装 docker
容器服务 : systemctl <[start,stop,restart]> docker.service | service docker start
容器版本 : docker version
仓库 : 仓库是集中存放镜像的地方[公有仓库, 私有仓库] (注册服务器: 存放仓库的具体服务器)
公有仓库 : Docker Hub => https://hub.docker.com/
docker login 输入用户信息登录到 => Docker Hub => 本地 .dockercfg 保存用户的认证信息
docker search # 不需要登录
# 官方的镜像一般为 基础镜像或者根镜像 => docker.io/mysql
# 个人用户的镜像一般为 用户名 / 镜像名称 => sokminyo/mysql-1
docker pull www.self.com/mysql # 指定网站拉取镜像
自动创建 : 用户通过 Docker Hub 指定跟踪一个目标网站上的项目, 若有提交, 则自动执行创建
创建和使用私有库 :
创建 : docker run -d -p 5000:5000 registry # 通过 registry 镜像 来创建私有库, 默认容器地址为 /tmp/registry, 最好先拉取 docker pull registry
创建指定 : docker run -d -p 5000:5000 -v /data/nginx/html:/tmp/registry registry # 指定路径创建
打上标签 : docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] => docker tag <33fbbf4a24e5> 127.0.0.1:5000/tt
上传镜像 : docker push 127.0.0.1:5000/tt
镜像 :
获取镜像 : docker pull < 名称 >[:TAG(标签)] => docker pull php
查看镜像 : docker images [名称] => docker images
查看详情 : docker inspect < 名称或 Id> => docker inspect php [-f(指定内容),…] docker inspect php -f {{‘.Id’}}
搜索镜像 : docker search [OPTIONS] TERM => docker search php:7.1-fpm
删除镜像 : docker rmi < 名称 > => docker rmi [-f(强制删除)] php:7.1-fpm # 正在运行的镜像无法删除
存出镜像 : docker save -o < 存出的文件名. 格式(php.tar)> < 镜像名称或 Id> => docker save -o php.tar 894f8d826f6a
载入镜像 : docker load –input php.tar(文件名称)
容器 :
新建容器 : docker create -it < 镜像名称或 ID(php:7.1-fpm)> # 默认情况下为不启动
新建并启动容器 : docker run
查看容器 : docker ps # 查看当前运行的容器 docker ps -a # 查看所有容器
运行容器 : docker run < 容器名 orID>
停止容器 : docker stop < 容器名 orID>
开启容器 : docker start < 容器名 orID>
终止容器 : docker kill < 容器名 orID>
重启容器 : docker restart < 容器名 orID>
容器日志 : docker logs < 容器名 orID>
容器端口 : docker port < 容器名 orID>
删除容器 : docker rm < 容器名 orID>
进入容器 : docker exec -it < 容器名 orID> /bin/bash
导出容器 : docker export < 容器名 orID> > 文件名. 格式 => docker export mysql >mysql.tar
导入容器 : docker import 文件名. 格式
容器中 :
安装 vi|vim : apt-get install -y vi|vim
更新 apt : apt-get update # 安装其他功能时, 更新 - 安装 - 更新
数据卷 : 供容器使用的特殊目录 volume(卷)
创建 : 在运行的时候加上 -v 可以使用多个
docker run -d -p -v /data/nginx/html:/usr/share/nginx/html (将本机的文件映射到容器中的文件)
docker run -p 8080:80 –name test_nginx -v /data/nginx/html:/usr/share/nginx/html -d docker.io/nginx
-p 8000:80 把容器 80 端口映射到服务 8000
–name 设置名字
-d 后台运行 | 守护
-v /data/nginx/html:/usr/share/nginx/html (将本机的文件映射到容器中的文件)
more :
-a stdin : 指定标准输入输出内容类型 , 可选 STDIN/STDOUT/STDERR 三项
-d : 后台运行容器 , 并返回容器 ID
-i : 以交互模式运行容器 , 通常与 -t 同时使用
-p <port(主机)>:<port(容器)> : 端口映射
-t : 为容器重新分配一个伪输入终端 , 通常与 -i 同时使用
–name <defineName> : 为容器指定一个名称
–dns 8.8.8.8 : 指定容器使用的 DNS 服务器 , 默认和宿主一致
–dns-search example.com: 指定容器 DNS 搜索域名 , 默认和宿主一致
-h “mars”: 指定容器的 hostname
-e username=”ritchie”: 设置环境变量
–env-file=[]: 从指定文件读入环境变量
–cpuset=”0-2″ or –cpuset=”0,1,2″: 绑定容器到指定 CPU 运行
-m : 设置容器使用内存最大值
–net=”bridge”: 指定容器的网络连接类型 , 支持 bridge/host/none/container: 四种类型
–link=[]: 添加链接到另一个容器
–expose=[]: 开放一个端口或一组端口
数据卷容器 : 容器之间共享数据(挂载在同一个文件夹中)
docker run -it -v /dbData –name dbData php # 删除卷 docker rm -v dbData
docker run -it –volumes-from dbData –name db1 php
docker run -it –volumes-from dbData –name db2 php
数据卷迁移数据 : 备份和恢复(自行了解)
端口映射实现访问容器 :
端口映射 : docker run -p 端口: 端口
自定义名称 : docker run –name 名称
容器互联 : docker run –link 容器名称
docker 公开连接 : 环境变量(env) 或 更新 /etc/hosts 文件
使用 Dockerfile 创建镜像 : 文本格式的配置文件
指令 : 一般格式为 instruction(指令) arguments(参数) , 指令包括 from , maintainer(维护者) , run , cmd 等 .
组成部分(一般而言) : 基础镜像信息 , 维护者信息 , 镜像操作指令 , 容器操作指令
eg :
# 第一行必须指定基于的基础镜像
# FROM <image>[:<tag>]
FROM php:7.1
# 维护者信息
# MAINTAINER <name>
MAINTAINER huangzhhui <h@swoft.org>
# ENV <key> <value> 指定一个环境变量 , 可供 RUN 命令使用 , 并在容器中保持运行
ENV PHPREDIS_VERSION 4.0.0
ENV HIREDIS_VERSION 0.13.3
ENV SWOOLE_VERSION 4.0.3
# 镜像操作指令(可以有多个)
# RUN <command> 在 shell 终端中运行命令, 即 /bin/sh -C
# 或者
# RUN [“executalbe”,”param1″,”param2″] 这里的 [] 非说明中的 , 使用 exec 执行
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer \
&& composer self-update –clean-backups
# 容器暴露的端口号
# EXPOSE <port> [<port>…]
EXPOSE 80 22 443
# 容器操作指令
……
# (只能有一个, 如果有多个只会执行一个)
# CMD [“executalbe”,”param1″,”param2″] 这里的 [] 非说明中的 , 使用 exec 执行 (推荐)
# 或者
# CMD command param1 param2 在 /bin/sh 中执行
# 或者
# CMD [“param1″,”param2”] 提供给 entrypoint 的默认参数
CMD /usr/sbin/nginx
其他指令 :
ADD <src> <dest> : 复制指定的 src 到容器中的 dest
COPY <src> <dest> : 复制本地的 src 到容器 dest
ENTRYPOINT : 配置容器启动后执行的命令 , 只能有一个 , 如果有多个只会执行一个(最后一个生效)
1 : ENTRYPOINT command param1 param2 在 /bin/sh 中执行
or
2 : ENTRYPOINT [“param1″,”param2”]
VOLUME : VOLUME [“/data”] # 创建一个可以从本地主机或其他容器挂载的挂载点 , 一般用于存放数据和保持数据
USER : USER daemon # 指定运行容器是的用户名或 UID
WORKDIR : WORKDIR /path/to/workdir # 为后续 RUN , CMD , ENTRYPOINT 等指令配置工作目录 . 可多个 如果后续路径为相对路径, 则会基于之前的指令
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd # /a/b/c
ONBUILD : ONBUILD [INSTRUCTION]
创建镜像 : 完成 dockerFile 后 , 可通过 docker build [option] 来创建镜像
可配置 .dockerignore 文件 , 来忽略 docker 路径下的 目录和文件
常见问题 :
docker 组没有 : could not change group /var/run/docker.sock to docker: group docker not found
uname -r 查看内核
Why:SELinux 不支持 overlay2 graph driver
Solve :
vi /etc/sysconfig/docker, 在 docker 里禁用 selinux-enabled=false,
挂载失败 : /usr/bin/docker-current: Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/b35b5d54a4bb354ff5bbf4b8906db3acce819339c8c9bf378d9e388d9dedbed7-init/merged: invalid argument.
Solve :
rm -rf /var/lib/docker # 会删除 docker images
vi /etc/sysconfig/docker-storage # 指定 DOCKER_STORAGE_OPTIONS=”–storage-driver overlay”
vi /etc/sysconfig/docker # 删除 –selinux-enabled
图片介绍 :