說明 :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
圖片介紹 :