時間:2017年09月16日星期六
說明:本文部份內容均來自慕課網。@慕課網:http://www.imooc.com
教學源碼:無
學習源碼:無html
Docker入門教程node
Docker簡介:什麼是Docker 鏡像與容器 容器存儲 Registry 多容器app
面向用戶mysql
對docker感興趣的開發、測試、運維
預備知識linux
linux命令行 bash shell腳本
什麼是Dockernginx
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中, 而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。 容器是徹底使用沙箱機制,相互之間不會有任何接口。
與現有技術進行類比git
能夠粗糙地理解爲輕量級的虛擬機 開掛的chroot(chroot:對應用程序做了文件系統的分離)
Docker與虛擬機github
學習筆記sql
進入docker官網:www.docker.com 下載docker安裝包:Docker.dmg 打開docker open Docker.dmg 或雙擊Docker.dmg 將Docker拖到Applications裏面 驗證安裝 docker info
學習筆記docker
安裝docker自己 sudo wget -qO- https://get.docker.com/ | sh 容許非root用戶運行docker sudo usermod -aG docker zc 驗證安裝 docker info
學習筆記shell
官網地址:https://www.docker.com/ 下載安裝包:https://www.docker.com/docker-windows 執行安裝包:Docker for Windows Installer.exe
Docker架構
學習筆記
docker run ubuntu echo hello docker 使用ubuntu鏡像,在裏面運行了echo hello docker這個命令,輸出就是hello docker docker run nginx docker images 查看本地鏡像 docker run -p 8080:80 -d daocloud.io/nginx 運行daocloud.io/nginx鏡像 -p 端口映射,將nginx的80端口映射到本地的8080端口 -d 使用守護進程啓動 docker ps 查看當前正在運行的容器 docker cp index.html 容器ID:容器內部文件路徑 docker cp index.html 17asdasdasa://usr/share/nginx/html 將index.html文件拷貝到容器ID爲17asdasdasa容器內部,路徑爲//usr/share/nginx/html docker stop 容器ID 中止指定容器 docker commit -m 'fun' 容器ID nginx-fun 保存容器爲鏡像,鏡像名爲nginx-fun docker rmi 鏡像ID 刪除指定鏡像 docker ps -a 查看全部容器(正在運行和中止運行) docker rm 容器ID 刪除指定容器 docker pull 獲取鏡像 docker build 建立鏡像 docker images 列出鏡像 docker run 運行鏡像爲容器 docker ps 列出正在運行的容器 docker rm 刪除容器 docker rmi 刪除鏡像 docker cp 在主機和容器之間拷貝文件 docker commit 保存改動後的容器爲新的image
學習筆記
第一個Dockerfile FROM alpine:latest MAINTAINER zc CMD echo 'hello docker' // 依賴於基礎鏡像alpine:latest // 標識鏡像信息 // 須要運行的命令 touch Dockerfile 產生一個Dockerfile文件 vim Dockerfile 編輯Dockerfile文件 docker build -t hello_docker . 構建docker鏡像,-t參數指定鏡像名稱,最後面的點(.)表示構建鏡像文件的路徑 docker images docker run hello_docker
學習筆記
第二個Dockerfile FROM ubuntu MAINTAINER zc RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nginx COPY index.html /var/www/html ENTRYPOINT ["/usr/sbin/nginx","-g","deamon off;"] EXPOSE 80 // 依賴於基礎鏡像ubuntu // 標識鏡像信息 // 運行ubuntu命令,新增一個軟件倉庫鏡像地址 // 運行ubuntu命令,更新軟件 // 運行ubuntu命令,安裝nginx // 拷貝本地文件到鏡像內部 // 在鏡像中默認啓動nginx服務 // 鏡像暴露服務的端口 mkdir dockerfile2 cd dockerfile2 touch Dockerfile vim Dockerfile touch index.html vim index.html 今天是週末! docker build -t zc/hello-nginx . docker run -d -p 80:80 zc/hello-nginx curl http://localhost 使用curl進行測試
Dockerfile語法
FROM:指明基礎鏡像名稱。必填 RUN:用於執行命令,當RUN執行完畢後,將產生一個新的文件層。可選 ADD:向鏡像添加新文件或者新目錄。可選 COPY:從主機向鏡像複製文件。可選 CMD:指定此鏡像啓動時默認執行命令。可選 EXPOSE:用於指定須要暴露的網絡端口號。可選 WORKDIR:設定此鏡像後續操做的默認工做目錄。可選 MAINTAINER:可用於提供做者、版本及氣他備註信息。可選 ENV:用於在鏡像中添加環境變量。可選 ENTRYPOINT:在鏡像中設定默認執行的二進制程序。可選 USER:在鏡像構建過程當中,生成或者切換到另外一個用戶。可選 VOLUME:向鏡像中掛載一個卷組。可選
鏡像分層
Dockerfile中的每一行都產生一個新層 FROM alpine:latest 4dffsd5454wq MAINTAINER zc fbdfasdfasfd554 CMD echo 'hello docker' 3df545dfad4a
Volume
提供獨立於容器以外的持久化存儲
學習筆記
第一種形式 docker run -v 容器內部地址 鏡像名稱 docker run -d --name nginx -v /usr/share/nginx/html nginx 運行nginx容器,經過-v掛載一個卷組,經過-d後臺啓動,經過--name爲容器指定名稱 docker inspect 容器名稱 docker inspect nginx 查看指定容器全部信息 查看Mounts節點下的Sources節點和Destination節點信息 該容器把宿主機的Sources對應目錄掛載到容器內部的Destination的目錄地址 cd Sources對應的目錄路徑 vim index.html,修改index.html文件 docker exec -it 容器名稱 /bin/bash 進入到容器內部 cd Destination對應的路徑路徑 而後查看index.html文件,發現是剛剛修改後的內容,即掛載成功,映射關係正確 第二種形式 docker run -v $PWD/code:/var/www/html nginx 本地目錄掛載到容器裏面的一個路面裏面 docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx cat html/index.html 查看本地文件的內容 docker exec -it 容器名稱 /bin/bash 進入到容器內部 cat /usr/share/nginx/html/index.html 發現其內容和本地文件的內容一致,即映射關係正確 第二種形式 docker run --volumes-from ... mkdir data docker create -v $PWD/data:/var/mydata --name data_container ubuntu 產生一個僅有數據的容器 docker run -it --volumes-from data_container ubuntu /bin/base 從另一個容器掛載, 運行並直接進入容器內部 mount cd mydata touch whatever.txt exit cd data ls 查看本地data目錄下是否有whatever.txt文件 能夠多個容器掛載一個數據容器,實現數據共享
Docker相關術語
host:宿主機 image:鏡像 container:容器 registry:鏡像倉庫 daemon:守護程序 client:客戶端
Registry相關命令
docker search 鏡像名稱 從鏡像倉庫中搜索指定鏡像 docker pull 鏡像名稱 從鏡像倉庫中拉取指定鏡像 docker push 鏡像名稱 將本地鏡像推送到鏡像倉庫
國內的一些鏡像倉庫
daocloud 時速雲 阿里雲
學習筆記
docker search whalesay 在鏡像倉庫中搜索whalesay docker pull docker/whalesay 從鏡像倉庫中拉取鏡像docker/whalesay到本地 docker images 查看本地鏡像信息 docker run docker/whalesay cowsay Docker so fun 運行docker/whalesay鏡像,並指定參數 docker tag docker/whalesay zc/whalesay 依賴docker/whalesay鏡像產生新的zc/whalesay鏡像(相似複製) docker push zc/whalesay 將鏡像zc/whalesay推送到鏡像倉庫 docker login 在push以前,須要登陸。默認登陸到docker hub 到docker hub官方地址 查看到本身push的鏡像
docker-compose
多容器app docker-compose是獨立的軟件 docker-compose安裝 linux:curl https://github.com/docker/compose
學習筆記
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 下載docker-compose包到/usr/local/bin/docker-compose chmod a+x /usr/local/bin/docker-compose 給/usr/local/bin/docker-compose授可執行權限 docker-compose --version 驗證安裝
實戰案例介紹
app名稱:ghost,是一個博客平臺程序 安裝以後,可本身寫文章或別人發佈 架構:nginx-ghost app-mysql 分別分爲三個容器
docker-compose.yml文件
ghost-app: build: ghost depends_on: - db ports: - "2368:2368" nginx: build: nginx ports: - "80:80" depends_on: - ghost-app db: images: "mysql:5.7.15"
docker-compose.yml命令
build:本地建立鏡像 command:覆蓋缺省命令 depends_on:鏈接容器 ports:暴露端口 volumes:掛載卷組 image:拉取鏡像
docker-compose命令
up:啓動服務 stop:中止服務 rm:刪除服務中的各個容器 logs:觀察各個容器中的日誌 ps:列出服務相關的容器
學習筆記
mkdir ghost cd ghost mkdir ghost mkdir nginx mkdir data // ghost鏡像構建 cd ghost touch Dockerfile vim Dockerfile FROM ghost COPY ./config.js /var/lib/ghost/config.js EXPOSE 2368 CMD ["npm","start","--production"] // 依賴ghost官方鏡像 // 拷貝本地配置文件到鏡像中 // 聲明暴露服務的端口 // 執行啓動命令。ghost爲node.js程序,因此使用npm命令 touch config.js vim config.js var path = require('path'), config; config = { production: { url:'http://mytestblog.com', mail: {}, database: { client: 'mysql', connection: { host: 'db', user: 'ghost', password: 'ghost', database: 'ghost', port: '3306', charset: 'utf8' }, debug: false }, paths: { contentPath: path.join(process.env.GHOST_CONTENT,'/') }, server: { host: '0.0.0.0', port: '2368' } } }; module.exports = config; // nginx鏡像構建 cd nginx touch Dockerfile vim Dockerfile FROM nginx COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 // 依賴nginx官方鏡像 // 拷貝本地配置文件到鏡像中 // 聲明暴露服務的端口 touch nginx.conf vim nginx.conf worker processes 4; events {worker_connections 1024;} http { server { listen 80; location / { proxy_pass http://ghost-app:2368; } } } 回到ghost根路徑 ls顯示 ghost:存放Dockerfile和配置文件用來構建鏡像 nginx:存放Dockerfile和配置文件用來構建鏡像 data:存放博客的數據 // compose文件用於描述整個系統的架構 touch docker-compose.yml vim docker-compose.yml version: '2' networks: ghost: service: ghost-app: build: ghost networks: ghost depends_on: db ports: "2368:2368" nginx: build: nginx networks: ghost depends_on: ghost-app ports: "80:80" db: image: "mysql:5.7.15" networks: ghost environment: MYSQL_ROOT_PASSWORD: mysqlroot MYSQL_USER: ghost MYSQL_PASSWORD: ghost volumes: $PWD/data:/var/lib/mysql ports: "3306:3306" docker-compose up -d 啓動 docker-compose stop 關閉 docker-compose rm 刪除 docker-compose build 構建 訪問http://localhost/ghost
課程總結
Docker介紹:容器、鏡像 如何製做鏡像 如何分享鏡像 如何持久化容器數據 如何編排一個多容器的應用