環境
要求64位os,centos7及以上。建議使用最新版本docker與docker-compose
官方文檔:https://docs.docker.com
官方鏡像:https://hub.docker.com
官內回速源:https://get.daocloud.io/
compose: https://docs.docker.com/compose/
在官方網站能找到所有支持,賴得看en的,可以繼續看本書。
鏡像站上能找到所有常用開源程序的鏡像,如mysql、percona、redis等等。附帶各種運行文檔。
例子-從官方鏡像源開始
以 percona-mysql https://docs.docker.com/_/percona/ 爲例。
hub文檔一般會先標出此鏡像可使用的 tag,即版本,如此mysql支持 5.5~5.7。
然後就是如何運行此鏡像,一般列出一個啓動命令樣例,形如:
docker run –name some-percona -e MYSQL_ROOT_PASSWORD=my-secret-pw -d percona:tag
實際上,你如用選用5.6版本的mysql,你的命令是這樣的:
docker run –name you-mysql-name -e MYSQL_ROOT_PASSWORD=you-passwd -d percona:5.6
即你可以改實例名字,環境變量對應的值,而-d表示後臺運行;最後一個參數是指定tag(版本)。
第一次運行docker run
- 首次運行,如果本地沒有此鏡像源,docker會自動去官方下載,你會看到下載過程的輸出。
- 首次運行使用run參數,如果是第二運行(啓動)使用start參數+實例名字即可。
- 如果不指定 –name <實例名字> ,docker會隨機生一個,
- 第二次運行,使用docker start <實例名>
- 注意,首次運行時,run後面帶的參數會對鏡像進行初始化,在下一次start時,不必帶上其它參數。
個性化
1.可以改變掛載目錄,(使用 -v 指令,參數中的目錄使用冒號隔開)
docker run –name you-mysql-name -v /you-path:/var/lib/mysql
2.使用自定義的my.cnf 配置, 原理與使用 改變掛載目錄一下,只是把conf.d指定一下。
3 文檔最還有列出了可使用用的環境變量。
4 或者直接先用docker-storage指定一個掛載卷, 運行docker實例時指定使用此卷
常用管理命令
docker ps -a # 列出所有docker實例與狀態
docker run <實例名> # 不使用-d參數,可以看到stdout輸出,用作調試
docker rm <實例名>
docker stop <實例名> # 理論上會安全退出
docker logs <實例名> # 查看stdout的log輸出,如果run時使用 -d參數
docker exec -it <實例名> bash #進入docker環境的bash
殺手鐗 docker-compose
關於docker-compose更多內容, 可以點去 https://docs.docker.com/compose/
舉個例子:
0. 安裝好docker-compose 後
1. 創建一個docker-compose.yml 文件,內容如下,注意文件名固定。
# 第一步創建一個存儲卷區
zabbix-db-storage:
image: busybox:latest
volumes:
- /data/docker/mysql:/var/lib/mysql
# 第二步,運行一個mysql,使用mariadb分支版本,
# 並且指定使用第一步中創建的卷區,使用keyvolumes_from指定。
# 還有環境變量什麼的
zabbix-db:
image: zabbix/zabbix-db-mariadb
volumes:
- /data/docker/backups:/backups
- /etc/localtime:/etc/localtime:ro
volumes_from:
- zabbix-db-storage
environment:
- MARIADB_USER=zabbix
- MARIADB_PASS=password_abc
# 第三步,支行zabbix服務程序,並且與link到第二步中的mariadb
# ports爲導出宿主機對應端口
zabbix-server:
image: zabbix/zabbix-3.0:latest
ports:
- "80:80"
- "10051:10051"
- "10050:10050"
volumes:
- /etc/localtime:/etc/localtime:ro
- ./yahei.ttf:/usr/local/src/zabbix/frontends/php/fonts/DejaVuSans.ttf
- ./locales.inc.php:/usr/local/src/zabbix/frontends/php/include/locales.inc.php
- ./default-ips.conf:/etc/nginx/conf.d/default-ips.conf
- ./sms.sh:/usr/local/share/zabbix/alertscripts/sms.sh
- ./sms.py:/usr/local/share/zabbix/alertscripts/sms.py
links:
- zabbix-db:zabbix.db
environment:
- ZS_DBHost=zabbix.db
- ZS_DBUser=zabbix
- ZS_DBPassword=password_abc
- 在此docker-compose.yml 文件目錄下運行以下命令即可同行運行1個storage與2個服務程序
docker-compose up -d # -d表示後臺運行
Dockerfile
寫好Dockerfile後,同目錄運行 docker build -t ‘your_img_name’ 可創建出iamge.
docker run -d your_img_name 運行剛剛創建的鏡像–相當於調試。
docker logs -t ‘image-runing-NAMES’ 查看最後輸出日誌。
進入docker容器: docker exec -it CONTAINER bash
風險
- 導出端口功能,是使用iptables的類似forward的chain功能,會修改系統iptables設置,但並不會持久=化,所以建議使用導出端口運行後,執行iptables-save > /etc/sysconfig/iptables
- 由於Docker容器是建立在Aufs文件系統基礎上,網上有相關資料、文章說過,當硬盤IO與網絡IO大的容器,會有性能上的間斷性抽風。