「相見恨晚」用來形容我對docker的熱愛再合適不過了,自從用了docker,開發環境也不安裝了,系統想換就換了,部署更是一鍵部署,不再用擔憂在這臺機器上跑的好好的,其它機器有問題了...mysql
寫這篇文章,也是爲docker的發展盡本身一點綿薄之力。nginx
適合人羣:您使用docker不久;正打算使用docker;尚未使用過docker。git
docker是容器(引擎)。github
容器用來作什麼? 裝東西web
裝什麼?裝你的應用,例如你的博客網站就是一個應用。redis
3.1 對開發者來講sql
1 啓動速度快,傳統虛擬機須要數分鐘的啓動時間,docker秒秒鐘啓動。 2 一致的運行環境,用了docker,不再會出現,爲何在個人電腦運行的好好的,在你的電腦上卻有問題!!
3.2 對運維人員來講docker
1 持續交付和部署。開發者只須要push代碼到版本管理(git)便可,接下來的自動測試,自動構建,自動部署都交給docker吧 2 更輕鬆的擴展。什麼?須要增長機器知足日益增加的pv需求,有docker-compose 一鍵部署就夠了。
3.3 與傳統虛擬機的比較ubuntu
從如今開始,刪除掉你本機上的全部開發環境,包括虛擬機, Vagrantbash
官方文檔 固然是不二之選
固然,也照顧習慣看中文的朋友:
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.045 docker exec 進入容器
docker exec -it webserver bash6 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) 刪除全部容器
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的時候變量變量污染