Docker 5分鐘入門

環境

要求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
  1. 在此docker-compose.yml 文件目錄下運行以下命令即可同行運行1個storage與2個服務程序

docker-compose up -d # -d表示後臺運行

Dockerfile

  1. 寫好Dockerfile後,同目錄運行 docker build -t ‘your_img_name’ 可創建出iamge.

  2. docker run -d your_img_name 運行剛剛創建的鏡像–相當於調試。

  3. docker logs -t ‘image-runing-NAMES’ 查看最後輸出日誌。

  4. 進入docker容器: docker exec -it CONTAINER bash

風險

  1. 導出端口功能,是使用iptables的類似forward的chain功能,會修改系統iptables設置,但並不會持久=化,所以建議使用導出端口運行後,執行iptables-save > /etc/sysconfig/iptables
  2. 由於Docker容器是建立在Aufs文件系統基礎上,網上有相關資料、文章說過,當硬盤IO與網絡IO大的容器,會有性能上的間斷性抽風。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章