寫給docker新手的文章

1. 前言

「相見恨晚」用來形容我對docker的熱愛再合適不過了,自從用了docker,開發環境也不安裝了,系統想換就換了,部署更是一鍵部署,不再用擔憂在這臺機器上跑的好好的,其它機器有問題了...mysql

寫這篇文章,也是爲docker的發展盡本身一點綿薄之力。nginx

適合人羣:您使用docker不久;正打算使用docker;尚未使用過docker。git

2. docker是什麼

docker是容器(引擎)。github

容器用來作什麼? 裝東西web

裝什麼?裝你的應用,例如你的博客網站就是一個應用。redis

3. 爲何要用docker

3.1 對開發者來講sql

1 啓動速度快,傳統虛擬機須要數分鐘的啓動時間,docker秒秒鐘啓動。
2 一致的運行環境,用了docker,不再會出現,爲何在個人電腦運行的好好的,在你的電腦上卻有問題!!

3.2 對運維人員來講docker

1 持續交付和部署。開發者只須要push代碼到版本管理(git)便可,接下來的自動測試,自動構建,自動部署都交給docker吧
2 更輕鬆的擴展。什麼?須要增長機器知足日益增加的pv需求,有docker-compose 一鍵部署就夠了。

3.3 與傳統虛擬機的比較ubuntu

clipboard.png

4. 如何學習(使用)docker

從如今開始,刪除掉你本機上的全部開發環境,包括虛擬機, Vagrantbash

官方文檔 固然是不二之選
固然,也照顧習慣看中文的朋友:
Docker — 從入門到實踐

5. docker經常使用命令

1 service docker start |stop |restart 啓動 中止 重啓

2 docker run 鏡像名稱:標籤 運行容器 docker -i 交互式操做 docker -t terminal操做
--rm 退出就刪除容器
--name 指定容器名稱

舉例:docker run -it --rm ubuntu:14.04 bash

3 docker images 列出已經下載下來的鏡像portcommit

-f dangling= true 顯示 虛懸鏡像(dangling image)
根據倉庫名列出鏡像 docker images  '倉庫名'
列出特定的某個鏡像,也就是說指定倉庫名和標籤 docker images  '倉庫名:標籤名'
-f在..以前  docker images -f since=mongo:3.2
-f參數  docker images -f label=com.example.version=0.1
只顯示id docker images -q
自定義表格格式 docker images --format "{{.ID}}: {{.Repository}}" 或者 docker images --format "table {{.ID}}\t{{.Repository}}\t{{.T-pag}}"

4 docker pull 獲取鏡像

docker pull ubuntu:14.04

5 docker exec 進入容器

docker exec -it webserver bash

6 docker build [選項] 生成的文件名 上下文(context) 構建鏡像

例如 : docker build -t nginx:v3 .

7 -p <宿主端口>:<容器端口>

8 docker rmi [選項] <鏡像1> [<鏡像2> ...]

注意 docker rm 命令是刪除容器,不要混淆。

9 docker rm 刪除容器

docker rm $(docker ps -a -q) 刪除全部容器

6. docker常見問題

1 因爲牆的問題致使docker安裝失敗或者各類問題
Docker CE 鏡像源站
2 pull鏡像太慢
Docker 鏡像加速器
3 docker mysql設置初始密碼(docker mysql啓動立刻就自動退出)

docker run 加上環境變量參數 -e MYSQL_ROOT_PASSWORD=password1

4 docker redis 設置初始密碼

Dockerfile CMD: 'redis-server --requirepass "password1"'

5 docker cron沒有執行

Dockerfile CMD: service cron start

6 docker cron 執行的時候時區不對

RUN echo "Asia/Shanghai" > /etc/timezone
或者
同步主機時區
docker run -v /etc/localtime:/etc/localtime <IMAGE:TAG>
以上兩種是網上搜索到的,我都沒有成功,我目前的解決方案是將crontab -e配置中的時區都往前推8個小時。例如:你原本是要1,9點運行的,設置爲1,17

7 docker corn 獲取不了環境變量

緣由:corn的bash環境變量和docker容器的環境變量不是同一個。
解決:
printenv |grep -v "==" | grep -v " " | sed 's/^\(.*\)$/export \1/g' > /project_env.sh \
&& chmod +x /project_env.sh \
&& service cron start \
&& bash

兩個grep -v 是爲了反正docker-compose link的時候變量變量污染
相關文章
相關標籤/搜索