Linux(Centos7)安裝、使用 Docker

1、Linux(CentOS7) 上安裝 docker

一、docker 是什麼?

  docker 是一種 虛擬化容器技術,一個開源的應用容器引擎。
  基於鏡像,能夠秒級啓動各類容器(運行一次鏡像就生成一個容器,相似於 Java 中 類與對象)。
  各容器間相互隔離,且每一個容器均是一個完整的運行環境。
  能夠很方便的讓開發者打包應用以及相關依賴包到一個可移植的輕量級的容器中,併發布到 Linux 上。
參考地址:
  https://www.cnblogs.com/l-y-h/p/11337051.html
  https://docs.docker.com/
  https://www.runoob.com/docker/docker-tutorial.htmlhtml

 

二、安裝

(1)官方文檔地址:
  https://docs.docker.com/mysql

(2)找到官方文檔位置,根據文檔一步步執行便可。
  Step1:進入官網,選擇 Get Docker,並選擇 Docker for Linux。linux

 

 

 

Step2:選擇 相應的 Linux 系統,此處我選擇 CentOS.git

 

 

 

(3)安裝流程
  Step1:卸載舊版本。
    查看當前系統是否有 docker 舊版本存在,存在則刪除舊版本。github

【方式一:(先查找是否存在,再刪除)】
    rpm -qa | grep docker
    
【方式二:(直接刪除,不論是不是存在,root 用戶不須要輸入 sudo)】
    sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

 

 

 

  Step2:安裝 Docker 倉庫。
  使用 Docker 倉庫進行安裝,用來簡化安裝、升級等操做。也可採用 RPM 方式手動安裝。
  所需軟件包:
    yum-config-manager 須要 yum-util。
    device mapper 存儲驅動程序 須要 device-mapper-persistent-data、 lvm2。redis

【安裝所需軟件包:(yum-utils、device-mapper-persistent-data、lvm2)】
    sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
      
【設置穩定的倉庫(用於下載 docker):】
    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo

 

 

 

  Step3:安裝社區版的 Docker(Docker Engine-Community)
    安裝最新版本的 Docker Engine-Community 和 containerd.sql

【安裝最新的 Docker:】
    sudo yum install docker-ce docker-ce-cli containerd.io
    
【查看當前版本,如有版本數據,則安裝成功】
    docker -v

 

 

 

  Step4:啓動 docker,並檢查是否成功啓動。docker

【啓動、關閉 docker:(方式一)】
    sudo systemctl start docker
    sudo systemctl stop docker
    
【啓動、關閉 docker:(方式二)】
    sudo service docker start
    sudo service docker stop
    
【檢查是否啓動成功:(方式一,查看本地鏡像)】
    sudo docker images
    
【檢查是否啓動成功:(方式二,運行 hello-world 鏡像)】
    sudo docker run hello-world

 

 

 

  Step5:設置開機自啓動。
    每次開機都得從新輸入命令用於啓動 docker,很麻煩,因此通常設置開機自啓動。json

【查看是否開機自啓動:】
    systemctl list-unit-files | grep enable
    或者
    systemctl list-unit-files | grep docker

【開機自啓動:】
    sudo systemctl enable docker    

 

 

 

(4)配置鏡像加速(此處使用 阿里雲鏡像)
    默認下載地址比較慢(dockerhub),使用鏡像加速能夠提升軟件下載速度。
  Step1:登錄 阿里雲官網,而後點擊 控制檯。vim

 

 

 

  Step2:進入控制檯,點擊列表框,選擇產品服務中的 容器鏡像服務。

 

 

 

  Step3:進入 容器鏡像服務後,選擇鏡像加速器,按照步驟操做便可。

 

 

 

  Step4:配置鏡像加速器。

【加速器地址:】
    https://y5krm9wr.mirror.aliyuncs.com

【修改配置文件:】
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://y5krm9wr.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker

 

 

 

2、經常使用命令 -- 鏡像倉庫管理相關命令

  用於從 遠程鏡像倉庫下載鏡像到本地。

一、docker pull(從鏡像倉庫中拉取指定的鏡像)

【格式:】
    docker pull [選項] 鏡像名[:版本號]
選項:
    -a      拉取全部鏡像
注:
    :版本號 能夠不存在,不存在時,獲取最新的鏡像。

【舉例:】
    docker pull mysql:8.0.19

 

 

 

二、docker search(從 Dcoker Hub 中查找鏡像)

【格式:】
    docker search [選項] 鏡像名
選項:
    -s 指定數       顯示 stars 不小於 指定數的鏡像。

【舉例:】
    docker search -s 20 mysql

 

 

 

3、經常使用命令 -- 本地鏡像管理命令

  用於管理本地的鏡像。

一、docker images(列出本地鏡像列表)

【格式:】
    docker images [選項] [鏡像名]
選項:
    -a          列出全部鏡像
    -q          只顯示鏡像 ID(IMAGE ID)
    --no-trunc  顯示完整的鏡像信息
    --digests   顯示鏡像摘要信息

【舉例:】 
    [root@localhost ~]# docker images mysql
    [root@localhost ~]# docker images --no-trunc

 

 

 

二、docker rmi(刪除鏡像)

【格式:】
    docker rmi [選項] 鏡像名
選項:
    -f    強制刪除
    
【舉例:】
    docker rmi tomcat

 

 

 

三、docker tag(標記本地鏡像,將其納入某個倉庫)

  至關於一個鏡像的不一樣名字。

【格式:】
    docker tag 原鏡像名 新鏡像名
    
【舉例:】
    [root@localhost ~]# docker tag tomcat:latest mytomcat 

 

 

 

4、經常使用命令 -- 管理容器的生命週期命令

  運行一個鏡像,就能夠生成一個 容器,容器內部是一個完整的運行環境。
  一個鏡像能夠生成多個容器,相似於 Java 中 類 與 對象的關係。
  須要對各個容器進行管理。

一、docker run(建立一個容器並運行)

【格式:】
    docker run [選項] 鏡像文件名
選項:
    -d              指在後臺運行容器,返回容器 ID。
    -i              以交互模式運行容器,一般與 -t 連用(即 -it)。
    -t              爲容器分配一個僞輸入終端。
    -P              隨機端口映射,將容器內部端口隨機映射到主機的端口
    -p              指定端口映射,將容器內部端口映射到主機指定端口,格式:-p 主機端口:容器端口
    --name          指定啓動容器的名字,格式: --name 容器名
    -e             指定環境變量,格式:-e 環境變量名=環境變量值
    -v             文件掛載,將容器內部文件與主機文件綁定,格式 -v 主機文件路徑:容器文件路徑
    
【舉例:】
    docker run --name mysqlDemo -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.0.19
上面命令爲:
    docker run mysql:8.0.19            執行 mysql:8.0.19 版本的鏡像,生成一個容器
    --name mysqlDemo                   容器命名爲 mysqlDemo
    -d                                 後臺運行
    -e MYSQL_ROOT_PASSWORD=123456      設置登錄密碼爲 123456,登錄用戶爲 root
    -p 3306:3306                       將容器內部 3306 端口映射到 主機的 3306 端口,即經過 主機的 3306 能夠訪問容器的 3306 端口

 

 

 

二、docker start/stop/restart(啓動、關閉、重啓容器)

【docker start 格式:】
    docker start 容器名
    
【docker stop 格式:】
    docker stop 容器名
    
【docker restart 格式:】
    docker restart 容器名
    
【舉例:】
    [root@localhost ~]# docker stop mysql

 

 

 

三、docker kill(殺掉一個正在運行的容器)

【格式:】
    docker kill [選項] 容器名
選項:
    -s     向容器發送一個信號

【舉例:】
    [root@localhost ~]# docker kill mysqlDemo

 

 

 

四、docker rm(刪除容器)

【格式:】
    docker rm [選項] 容器名
選項:  
    -f          強制刪除一個運行中的容器
    -v          刪除與容器相關聯的 卷
    
【舉例:】
     [root@localhost ~]# docker rm -f mysqlDemo 

 

 

 

五、docker create(建立一個容器,但不啓動容器)

【格式:】
    docker create [選項] 鏡像名
選項基本與 docker run 同樣(沒有 -d)。

【舉例:】
    [root@localhost ~]# docker create --name mysqlDemo1  -e MYSQL_ROOT_PASSWORD=123456 -p 3312:3306 mysql:8.0.19

 

 

 

六、docker exec(在運行的容器中執行命令)

【格式:】
    docker exec [選項] 容器名 命令
選項:
    -d              以分離模式在後臺運行。
    -i              以交互模式運行容器,一般與 -t 連用(即 -it)。
    -t              爲容器分配一個僞輸入終端。

【舉例:】
    [root@localhost ~]# docker exec -it mysql /bin/bash

 

 

 

5、經常使用命令 -- 查看容器信息命令

一、docker ps(查看當前容器列表)

【格式:】
    docker ps [選項]
選項:
    -a           顯示全部容器,包括未運行的容器
    -l           顯示最近建立的容器
    -n 指定數     顯示最近建立的 指定數 的容器。好比: -n 7,顯示最近建立的 7 個容器
    -q           只顯示容器 ID
    
【舉例:】
    [root@localhost ~]# docker ps -an 10

 

 

 

二、docker top(查看容器中運行的進程信息)

【格式:】
    docker top 容器名

【舉例:】
    [root@localhost ~]# docker top mysql

 

 

 

三、docker logs(獲取容器的日誌)

【格式:】
    docker logs [選項] 容器名
選項:
    -f          跟蹤日誌輸出
    --tail      顯示最新的 n 條日誌,格式: --tail=指定數
    -t          顯示時間戳

【舉例:】
    [root@localhost ~]# docker logs --tail=10 mysql

 

 

 

四、docker port(查看映射端口)

【格式:】
    docker port 容器名
    
【舉例:】
    docker port mysql

 

 

 

五、docker info(顯示 docker 系統信息)

【格式:】
    docker info

【舉例:】
    [root@localhost ~]# docker info

 

 

 

六、docker version、docker -v(顯示 docker 版本信息)

【格式:】
    docker version
    docker -v

【舉例:】
    [root@localhost ~]# docker version
    [root@localhost ~]# docker -v

 

 

 

6、Docker 上安裝 mysql 8.0.19 鏡像

一、查找 想要安裝的 mysql 版本

【方式一:官網搜索】
    https://hub.docker.com/
    https://hub.docker.com/_/mysql?tab=tags
    
【方式二:(經過命令行查詢)】
    docker search mysql

 

 

 

 

 

 

二、下載鏡像

  經過官網地址,能夠查看到 想要下載的版本,使用 pull 命令拉取鏡像便可.
  此處我選擇 8.0.19 版本的 mysql。
  若是沒有 設置版本,則會自動下載最新的版本(即 docker pull mysql 會下載最新的版本 latest)。

【命令行下載:】
    docker pull mysql:8.0.19
    
【查看鏡像是否成功下載:(即查看本地鏡像)】
    docker images

 

 

 

三、運行容器

【運行容器:】
    docker run -p 3306:3306 --name mysql \
    -v /usr/mydata/mysql/log:/var/log/mysql \
    -v /usr/mydata/mysql/data:/var/lib/mysql \
    -v /usr/mydata/mysql/conf:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:8.0.19
    
分析:
    docker run -d mysql:8.0.19             之後臺的方式運行 mysql 8.0.19 版本的鏡像,生成一個容器。
    --name mysql                           容器名爲 mysql
    -e MYSQL_ROOT_PASSWORD=123456          設置登錄密碼爲 123456,登錄用戶爲 root
    -p 3306:3306                           將容器內部 3306 端口映射到 主機的 3306 端口,即經過 主機的 3306 能夠訪問容器的 3306 端口
    -v /usr/mydata/mysql/log:/var/log/mysql    將容器的 日誌文件夾 掛載到 主機的相應位置
    -v /usr/mydata/mysql/data:/var/lib/mysql   將容器的 數據文件夾 掛載到 主機的相應位置
    -v /usr/mydata/mysql/conf:/etc/mysql/conf.d   將容器的 自定義配置文件夾 掛載到主機的相應位置
    
【查看容器是否啓動:】
    docker ps -a

 

 

 

 

 

 

四、使用

【本機使用:(使用交互式方式進入)】
    docker exec -it mysql /bin/bash
    
【外部訪問:(訪問主機的 3306 端口便可)】
    ifconfig 能夠查看 主機的 ip 地址(好比鏈接 :192.168.217.129:3306

 

 

 

 

 

 

五、修改配置文件(好比修改默認字符集)

  在啓動過程當中,已經將 /etc/mysql/conf.d 掛載到了 /usr/mydata/mysql/conf 上,因此在 /usr/mydata/mysql/conf 目錄下 新建一個 my.cnf 文件,並添加配置信息,便可修改 mysql 容器的配置。

【查看 當前 mysql 的字符集:】
    show variables like "%character%";

初始字符集。

 

 

建立 /usr/mydata/mysql/conf/my.cnf ,並重啓容器。

 

 

【在 /usr/mydata/mysql/conf 下新建一個 my.cnf 文件】
    [client]
    # 設置字符集爲 utf-8
    default-character-set=utf8
    
    [mysql]
    # 設置字符集爲 utf-8
    default-character-set=utf8
    
    [mysqld]
    # 設置登錄用戶
    # user=root
    # 設置字符集編碼爲 utf-8
    character-set-server=utf8

【重啓容器】
    docker restart mysql

 

 

 

7、Docker 安裝 Redis

一、查找須要安裝的鏡像

【方式一:官網搜索】
    https://hub.docker.com/
    https://hub.docker.com/_/redis?tab=tags
    
【方式二:(經過命令行查詢)】
    docker search redis

 

 

 

二、下載鏡像

【下載最新的鏡像:】
    docker pull redis

 

 

 

三、運行容器

【運行容器:】
使用 docker run -v 掛載文件時,若想掛載文件,須要先在主機上建立文件,不然會當成目錄掛載。
    mkdir -p /usr/mydata/redis/conf
    touch /usr/mydata/redis/conf/redis.conf

須要使用 redis-server /etc/redis/redis.conf 指定配置文件啓動 redis。
    docker run -p 6379:6379 --name redis \
     -v /usr/mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
     -v /usr/mydata/redis/conf/data:/data \
     -d redis redis-server /etc/redis/redis.conf 
     
分析:
    docker run -d redis   運行 redis 最新鏡像,並生成一個容器
    --name redis          容器名爲 redis
    -p 6379:6379          指定端口映射,容器的 6379 端口映射到 主機的 6379 端口,
    -v /usr/mydata/redis/conf/redis.conf:/etc/redis/redis.conf   掛載 redis 的配置文件到主機的指定位置
    -v /usr/mydata/redis/conf/data:/data   掛載 redis 的數據到主機的指定位置
    redis-server /etc/redis/redis.conf    表示根據 /etc/redis/redis.conf 配置文件啓動。

 

 

 

四、使用

【使用交互式方式進入 redis 容器】
    docker exec -it redis /bin/bash
    
【使用交互式方式 打開 redis-cli】
    docker exec -it redis redis-cli

 

 

 

五、修改配置文件(好比數據持久化)

  使用默認配置文件啓動 redis 時,數據不會持久化(即 appendonly = no)。
  當 redis 重啓後,數據就會丟失。

 

 

修改配置文件,添加數據持久化(即 appendonly = yes)。

【編輯 /usr/mydata/redis/conf/redis.conf】
    vim /usr/mydata/redis/conf/redis.conf

    appendonly yes

 

8、Docker 安裝 Nginx

參考地址:

  https://www.cnblogs.com/l-y-h/p/12844824.html#_label3

 

9、Docker 數據卷、自定義鏡像(DockerFile)、Docker-Compose

一、數據卷

(1)什麼是 Docker 數據卷?

【數據卷:】
    數據卷本質就是磁盤中的某個目錄,其能夠與 Docker 容器中某個目錄相關聯。
    能夠 理解成 將宿主機的一個目錄 映射 到 容器的某個目錄中。
    
【爲何使用 數據卷:】
    Docker 經過鏡像啓動一個容器後,容器會產生一些數據,若是不對這些數據進行處理,當容器被刪除後,數據將會丟失。
    能夠將這些數據 映射 到 數據卷中,這樣就能夠保存在 磁盤。
    再次啓動容器後,能夠掛載到 數據卷,從而獲取數據(實現數據持久化、共享等)。
    且 操做 數據卷中的數據,容器數據也會隨之變化,大大提升修改、查看數據的效率(不用進入容器內部)。 

 

(2)數據卷經常使用命令

【建立數據卷:】
    docker volume create 數據卷名稱
注:
    建立數據卷後,數據默認會存放在 /var/lib/docker/volumes/數據卷名稱/_data 目錄下。
好比:
    docker volume create testVolume 
    會建立一個 /var/lib/docker/volumes/testVolume/_data/ 目錄。
    
【查看數據卷詳細信息:】
    docker volume inspect 數據卷名稱
好比:
    docker volume inspect testVolume
    
【查看所有數據卷:】
    docker volume ls

【輸出數據卷:】
    docker volume rm 數據卷名稱
好比:
    docker volume rm testVolume

 

 

 

(3)數據卷 映射到 容器目錄中

【格式:】
    -v 數據卷:容器內部指定目錄
注:
    將數據卷 映射到 容器指定目錄

【方式一:(不推薦)】
    docker run 鏡像ID(鏡像名)-v 數據卷名稱:容器內部指定目錄
注:
    當 數據卷不存在時,Docker 會自動建立,且將容器內部自帶文件存放在 默認路徑中。
好比:
    docker run -d mysql:8.0.19 -v mysqlLog:/var/log/mysql

【方式二:(推薦)】
    docker run 鏡像ID(鏡像名)-v 磁盤路徑:容器內部指定目錄 
注:
    直接指定磁盤路徑做爲數據卷時,路徑下是空的。
好比:
    docker run -d mysql:8.0.19 v /usr/mydata/mysql/log:/var/log/mysql

 

(4)補充命令

docker stop $(docker ps)                     查詢全部容器並中止。

【cp 從主機 複製文件到 容器中】
    docker cp 磁盤目錄(文件) 容器名:容器目錄(文件)     
注:
    將文件從磁盤目錄 複製到 容器目錄中。
好比:
    docker cp test2.txt mysql2:/var/log/mysql    
    將當前目錄下 test2.txt 複製到 mysql2 容器的 /var/log/mysql 目錄下。

 

二、自定義鏡像(Dockerfile)

(1)說明
  Docker 倉庫中存在各類各樣的鏡像,每次下載同一個鏡像後,還得從新配置一遍,很是麻煩。
  能夠經過 Dockerfile 文件自定義鏡像,按照指令 構建鏡像。

(2)Dockerfile 經常使用指令

【FROM(from)】
    指定當前鏡像 是基於 哪一個鏡像建立的。
格式:
    from 鏡像
好比:
    from mysql:8.0.19           此鏡像基於 mysql:8.0.19 構建
    
【RUN(run)】
    容器構建(docker build)時須要運行的命令。
格式:
    run 命令一 && 命令二 
    run ["文件", "參數一", "參數二"]
好比:
    run echo '開始構建鏡像 ========== ' &&  echo ' ========== 開始構建鏡像'

【CMD(cmd)】
    指定容器啓動(docker run)時運行的命令。
    若存在多個 CMD,則以最後一個 CMD 爲主。
    能夠被 docker run 傳入的參數覆蓋。
格式:
    cmd 命令
    cmd ["命令", "參數1", "參數2"]    
    cmd ["參數1", "參數2"]   此寫法做爲 ENTRYPOINT 的默認參數
好比:
    cmd echo '開始啓動容器 ========== ' &&  echo ' ========== 開始啓動容器'
    
【ENTRYPOINT(entrypoint)】
    相似於 cmd,可是其不會被 docker run 傳入的參數覆蓋(可是若使用了 --entrypoint 的參數能夠覆蓋)。
格式:
    entrypoint 命令
    entrypoint ["命令", "參數1", "參數2"]
好比:
    entrypoint ["echo", "hello"]
    cmd ["world"]            
注:
    此時,若 docker run 不傳入任何參數時,則 cmd 將做爲 entrypoint 參數,
    即 entrypoint ["echo", "hello", "world"]
                
【COPY(copy)】
    將 指定文件或目錄 複製到 鏡像中的指定位置。
格式:
    copy src desc
好比:
    copy test.txt /root/test        將當前目錄下 test.txt 複製到 容器 /root/test 目錄下
    
【ADD(add)】
    將 指定文件或目錄 複製到 鏡像中的指定位置。
    會自動處理 URL 以及 解壓 tar 文件。
格式:
    add src desc
好比:
    add test2.txt /root/test        將當前目錄下 test.txt 複製到 容器 /root/test 目錄下
       
【MAINTAINER(maintainer)】
    設置維護者信息(姓名、郵箱等)
格式:
    maintainer 數據1 數據2
好比:
    maintainer lyh lyh@163.com   設置維護者 姓名、郵箱
    
【EXPOSE(expose)】
    設置當前容器對外暴露的端口號。
格式:
    expose port1 port2
好比:
    expose 8080          容器對外暴露端口號爲 8080
    
【ENV(env)】
    設置環境變量。
格式:
    env key value
好比:
    env map helloworld     經過 $map 能夠獲取環境變量值爲 helloworld
    
【WORKDIR(workdir)】
    指定鏡像默認的工做目錄。
格式:
    workdir 目錄
好比:
    workdir /root/work

【VOLUME(volume)】
    定義默認數據卷,若啓動容器時忘記經過 -v 進行數據卷映射到 容器目錄,將會自動掛載到 默認數據卷。
    持久書數據,避免數據丟失。
格式:
    volume 路徑
    volume ["路徑1", "路徑2"]

 

(3)製做鏡像
  將編寫好的 Dockerfile 文件以及須要複製的文件 製做成鏡像。

【docker build】
    docker build -t 鏡像名稱 .
或者
    docker build -t 鏡像名稱[:tag] .
注:
    命令末尾的點 . 指的是 上下文路徑(爲 Dockerfile 文件所在位置)。
    docker 構建鏡像時 會 將上下文路徑中全部的文件 進行打包(因此此路徑下不要放置無關文件)。

 

(4)Dockerfile 編寫舉例 以及 使用 docker build 自定義鏡像。
  通常都是新建一個空目錄 來進行 自定義鏡像操做,避免打包沒必要要的文件。
  建立一個名爲 Dockerfile 的文件(文件名不一致將致使 docker build 出錯)。

【Dockerfile:】
# 設置基礎鏡像
from            mysql:8.0.19

# 設置維護者信息                   
maintainer      lyh lyh@163.com

# docker build 時會觸發,
run echo '開始構建鏡像 ========== ' &&  echo ' ========== 開始構建鏡像'

# docker run 時會觸發
entrypoint ["echo", "啓動鏡像"]
cmd ["hello world"]

# 將當前目錄下的 test.txt 複製到 /root/test 目錄下
copy test.txt /root/test

# 將當前目錄下的 test2.txt 複製到 /root/test 目錄下
add test2.txt /root/test

# 對外暴露端口爲 8080
expose 8080

# 設置環境變量
env map helloworld
run echo $map

# 指定容器默認工做目錄
workdir /root/work

# 指定默認數據卷路徑
volume /var/lib/docker/volumes/defaultVolume

【構建自定義鏡像:】
    docker build -t customize_mysql .
    
【查看當前自定義鏡像信息:】
    docker inspect customize_mysql

 

 

 

 

 

 

 

 

 

 

 

 

三、Docker-Compose 管理容器

(1)說明
  使用 docker run 啓動一個容器時,須要配置上大量參數,當配置集羣 或者 須要啓動多個容器時 時,若一個一個去啓動,那工做量將變得很大,且容易出錯。
  使用 Docker-Compose 能夠進行容器的管理。其經過 docker-compose.yml 文件去維護容器參數信息。經過該 yml 文件能夠很方便的 管理、啓動 容器。

(2)下載、安裝

【官方地址:】
    github 地址: https://github.com/docker/compose
    文檔地址:https://docs.docker.com/compose/
    安裝文檔地址:https://docs.docker.com/compose/install/

【下載:(此處爲 1.27.4 版本,若須要其餘版本,替換便可)】
    curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
注:
    此方式下載速度較慢,能夠去 github 上找到對應版本 下載到本地後 再發送到 服務器上。
            
【給下載後的 docker-compose 添加可執行權限】
    chmod +x /usr/local/bin/docker-compose

【查看 docker 以及 docker-compose 版本號:】
    docker -v
    docker-compose -v
    
【查看環境變量:(非必須操做)】
    echo $PATH     能夠查看當前環境變量
    which 指令      好比:which docker 能夠查看 docker 指令所在目錄
注:
    若 docker-compose 不在環境變量中,能夠進行配置(方便在任意目錄執行 docker-compose)。
    打開 /etc/profile 文件,在 PATH 中追加指令所在目錄便可。
好比:
    vim /etc/profile
    export PATH="/usr/local/bin/:$PATH" 
    source /etc/profile

 

 

 

 

 

 

(3)docker-compose 命令
  執行 docker-compose 命令時,默認會在當前目錄下找 docker-compose.yml 文件。

【基於 docker-compose.yml 文件啓動容器:】
    docker-compose up -d
注:
    -d 表示後臺執行

【關閉並刪除 docker-compose 維護的容器:】
    docker-compose down
    
【開啓、關閉、重啓 已存在的 docker-compose 維護的容器:】
    docker-compose start
    docker-compose stop
    docker-compose restart
    
【查看由 docker-compose 管理的容器:】
    docker-compose ps

【查看日誌:】
    docker-compose logs -f    

 

(4)docker-compose.yml 經常使用參數
  yml 編寫時 須要注意 縮進 以及 空格(不要使用 Tab 鍵,容易出錯)。

【docker-compose.yml】
# 指定 compose 文件版本,與 docker 兼容,高版本的 docker 通常使用 3.x。
version: '3.7'

# 定義須要管理的 全部服務 信息
services:
  # 此處指的是服務的名稱
  mysqlService:
    # 指定構建鏡像的上下文路徑(通常與 Dockerfile 一塊兒使用)。
#    build:
#      # 指定 Dockerfile 所在路徑
#      context: ../
#      # 指定 Dockerfile 名稱(默認爲 Dockerfile)
#      dockerfile: Dockerfile

    # 指定容器的名稱(等同於 docker run --name)
    container_name: mysql2

    # 指定鏡像路徑(能夠是遠程倉庫鏡像 或者 本地鏡像)
    image: mysql:8.0.19

    # 設置環境變量
    environment:
      # 設置 MySQL 登錄用戶爲 root,登錄密碼爲 123456
      MYSQL_ROOR_PASSWORD: root
      # 指定時區
      TZ: Asia/Shanghai

    # 定義 宿主機 與 容器的端口映射
    ports:
      - 3307:3306

    # 定義 宿主機 與 容器的數據卷映射
    volumes:
      - /usr/mydata/mysql/log:/var/log/mysql
      - /usr/mydata/mysql/data:/var/lib/mysql
      - /usr/mydata/mysql/conf:/etc/mysql/conf.d

    # 定義容器重啓策略,no 表示任何狀況下都不重啓(默認),always 表示老是從新啓動。
    # 若使用 swarm 集羣模式,需使用 restart_policy 替代 restart
    restart: always

 

 

 

 

 

 

 

 

 

(5)docker-compose 配合 Dockerfile 使用
  使用 docker-compose.yml 文件 以及 Dockerfile 文件,在生成自定義鏡像的 同時 啓動當前鏡像,並由 docker-compose 維護、管理。
  docker-compose.yml 文件經過 build 參數能夠找到 Dockerfile 文件。

【Dockerfile】
from mysql:8.0.19

【docker-compose.yml】
# 指定 compose 文件版本,與 docker 兼容,高版本的 docker 通常使用 3.x。
version: '3.7'

# 定義須要管理的 全部服務 信息
services:
  # 此處指的是服務的名稱
  mysqlService:
    # 指定構建鏡像的上下文路徑(通常與 Dockerfile 一塊兒使用)。
    build:
      # 指定 Dockerfile 所在路徑
      context: ../
      # 指定 Dockerfile 名稱(默認爲 Dockerfile)
      dockerfile: Dockerfile

    # 指定容器的名稱(等同於 docker run --name)
    container_name: mysql2

    # 指定鏡像路徑(能夠是遠程倉庫鏡像 或者 本地鏡像)
    image: mysql:8.0.19

    # 設置環境變量
    environment:
      # 設置 MySQL 登錄用戶爲 root,登錄密碼爲 123456
      MYSQL_ROOR_PASSWORD: root
      # 指定時區
      TZ: Asia/Shanghai

    # 定義 宿主機 與 容器的端口映射
    ports:
      - 3307:3306

    # 定義 宿主機 與 容器的數據卷映射
    volumes:
      - /usr/mydata/mysql/log:/var/log/mysql
      - /usr/mydata/mysql/data:/var/lib/mysql
      - /usr/mydata/mysql/conf:/etc/mysql/conf.d

    # 定義容器重啓策略,no 表示任何狀況下都不重啓(默認),always 表示老是從新啓動。
    # 若使用 swarm 集羣模式,需使用 restart_policy 替代 restart
    restart: always

 

 

相關文章
相關標籤/搜索