【整理】docker-compose安裝操作
docker離線安裝
- 安裝docker-18.03.1-ce
#解壓
[[email protected] ~]# tar xzvf docker-18.03.1-ce.tar
#將解壓出來的 docker 檔案所有內容移動到 /usr/bin/ 目錄下
[[email protected] ~]# cp docker/* /usr/bin/
#開啟 docker 守護程序
[[email protected] ~]# dockerd &
#檢視版本
[[email protected] ~]# docker --version
- docker註冊為service
將以下檔案放入 /usr/lib/systemd/system/docker.service
中,就可使用service docker restart/stop
等操作來啟停docker
#建立或編輯docker.service
[[email protected] ~]# cd /usr/lib/systemd/system
[[email protected] ~]# vi docker.service
進入vim介面後,按Insert
鍵,進入編輯模式,把下面docker.service
內容右鍵複製進去。
然後按Esc
鍵退出編輯,輸入:wq!
,回車儲存檔案即可。
docker.service:
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
Docker-Compose
compose主要用於開發/測試場合,適合小規模應用的部署, 並不適合生產環境使用
- 安裝 下載docker-compose-Linux-x86_64檔案,國內下載地址
#複製到linux下 /usr/local/bin並改名為docker-compose
[[email protected] ~]#mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
#賦權
[[email protected] ~]#chmod +x /usr/local/bin/docker-compose
#檢視版本
[[email protected] ~]#docker-compose -v
- 命令 注意:docker-compose命令必須在docker-compose.yml檔案同目錄下執行
#修改檔案後需要重新build,本地建立映象
[[email protected] ~]#docker-compose build
#建立並啟動容器,第一次可以直接up,可以跳過build環節,
[[email protected] ~]#docker-compose up –d --build
#關閉並刪除容器
[[email protected] ~]#docker-compose down
#開啟服務
[[email protected] ~]#docker-compose start
#停止服務
[[email protected] ~]#docker-compose stop
#重啟服務
[[email protected] ~]#docker-compose restart
#刪除服務中的各個容器
[[email protected] ~]#docker-compose rm
#顯示容器
[[email protected] ~]#docker-compose ps
#顯示容器中的輸出內容
[[email protected] ~]#docker-compose logs
- 匯入映象
[[email protected] ~]# docker load –i 映象名.tar
- mysql+redis+springboot+nginx
匯入相關映象後,在目錄下建立docker-compose.yml
檔案,之後的相關操作都依賴該檔案
[[email protected] ~]# vi docker-compose.yml
進入vim介面後,按Insert
鍵,進入編輯模式,把下面docker-compose.yml
內容右鍵複製進去。
然後按Esc鍵退出編輯,輸入:wq!
,回車儲存檔案即可。
docker-compose.yml:
version : '3'
services:
mysql:
image: mysql:5.7
container_name: mysql
expose:
- "3306"
environment:
MYSQL_DATABASE: test
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: '%'
restart: always
redis:
image: redis:3.0.3
container_name: redis
restart: always
expose:
- "6379"
springboot:
image: springboot
restart: always
container_name: springboot
expose:
- "8083"
environment:
- spring.profiles.active=test
- TZ=Asia/Shanghai
depends_on:
- mysql
- redis
nginx:
image: mynginx
container_name: mynginx
restart: always
ports:
- "80:80"
depends_on:
- springboot
version: 使用第幾代語法來編寫檔案
services: 表示該檔案管理啟停的服務
image: 指定啟動容器的映象,映象倉庫/標籤或者映象id
**container_name:**該服務自定義容器名稱
restart: 服務重啟策略,指定為always時,容器總是重新啟動。no是預設的重啟策略,在任何情 況下都不會重啟容器。
expose: 暴露埠,但不對映到宿主機,只被連線的服務訪問。埠為內部埠
ports: 暴露埠資訊。使用宿主:容器 (HOST:CONTAINER)格式
environment: 新增環境變數,mysql中的環境變數為資料庫名,資料庫密碼等。
springboot兩個環境變數分別是指定工程執行環境和執行時區
可以在這裡新增環境變數覆蓋工程中的相應配置,如新增cacheType=jvm
可以覆蓋工程中的cacheType=redis
配置
depends_on: 服務依賴,指定服務之間的依賴關係,表示需要先啟動depends_on
下面的服務後,再啟動本服務。工程中可以使用依賴的服務名代替相關IP資訊
工程配置檔案:
spring.datasource.url=jdbc:mysql://mysql:3306/test?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.redis.hostName=redis
spring.redis.port=6379
spring.redis.pool.maxActive=1024
spring.redis.pool.maxWait=1000
spring.redis.pool.maxIdle=200
spring.redis.timeout=0
nginx配置檔案:
upstream webapp{
server springboot:8083 max_fails=3 fail_timeout=20s;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location /{
proxy_pass http://webapp/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
network_mode: 當需要獲取主機資訊時如MAC等,可以選擇主機模式,此時容器使用和主機同一網路,此時不可使用depends_on中的依賴服務名代替相關IP資訊,因所有容器都處於主機網路,可用localhost代替相關IP資訊。
#橋接模式
network_mode: "bridge"
#主機模式
network_mode: "host"
#無網路模式(稍後可自定義)
network_mode: "none"
#與指定服務同網路
network_mode: "service:[service name]"
#與指定容器同網路
network_mode: "container:[container name/id]"
注意:後面可以使用up、down等指令啟停全部服務。