说明 :php
[] 方括号表示 => 里面的参数可省 grep name 任何查询结果均可以经过 grep 进行筛选 # 注释符 () 命令解释 <> 必填参数
系统 :html
安装容器 : yum install -y epel-relase # 安装依赖 yum install docker-io # 安装docker 容器服务 : systemctl <[start,stop,restart]> docker.service | service docker start 容器版本 : docker version
仓库 : 仓库是集中存放镜像的地方[公有仓库,私有仓库] (注册服务器:存放仓库的具体服务器)mysql
公有仓库 : 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
镜像 :linux
获取镜像 : 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(文件名称)
容器 :nginx
新建容器 : 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 文件名.格式
容器中 :sql
安装vi|vim : apt-get install -y vi|vim 更新apt : apt-get update # 安装其余功能时,更新-安装-更新
数据卷 : 供容器使用的特殊目录 volume(卷)docker
建立 : 在运行的时候加上 -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 数据卷迁移数据 : 备份和恢复(自行了解)
端口映射实现访问容器 :shell
端口映射 : docker run -p 端口:端口 自定义名称 : docker run --name 名称 容器互联 : docker run --link 容器名称 docker公开链接 : 环境变量(env) 或 更新 /etc/hosts文件
使用Dockerfile建立镜像 : 文本格式的配置文件vim
指令 : 通常格式为 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 路径下的 目录和文件
常见问题 :bash
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
图片介绍 :