Docker
教程 https://docs.docker.comnode
設置Docker環境
構建映像並將其做爲一個容器運行
擴展您的應用程序以運行多個容器
在羣集中分發您的應用
經過添加後端數據庫來堆棧服務
將您的應用部署到生產環境
Docker簡介:python
docker是開發人員和系統管理員 使用容器開發,部署和運行應用程序的平臺。輕量級(較VM而言)linux
應用程序沒有系統依賴性
能夠將更新推送到分佈式應用程序的任何部分
資源密度能夠優化
與虛擬機的區別:nginx
虛擬機是一個系統,容器是一個進程。git
1.1 安裝環境
系統環境:CentOS 7.3.1611docker
1.2 安裝方式
① yum安裝 ②離線安裝數據庫
1.2.1 yum安裝過程npm
1.2.1.1 安裝依賴ubuntu
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2後端
1.2.1.2 配置yum國內源
$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.2.1.3 安裝
安裝docker-ce
$ sudo yum makecache fast
$ sudo yum install docker-ce
查看docker-ce列表,以便安裝指定版本
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 17.12.ce-1.el7.centos docker-ce-stable
yum install -y docker-ce-18.03.0.ce
1.2.2 離線安裝
1.2.2.1 下載安裝包
curl https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
1.2.2.2 刪除docker-ce
yum remove docker-ce
1.2.2.3 刪除docker存儲
rm -rf /var/lib/docker
1.3 啓動Docker服務
systemctl enable docker
systemctl start docker
查看服務是否啓動正常
systemctl status docker(結果以下證實正確)
1.4 測試Docker安裝
1.4.1 測試版本
docker --version
1.4.2測試安裝
1.經過運行簡單的Docker鏡像hello-world來測試您的安裝是否有效
docker image pull library/hello-world(library/hello-world是 image 文件在倉庫裏面的位置,其中library是 image 文件所在的組。因爲 Docker 官方提供的 image 文件,都放在library組裏面,因此它的是默認組,能夠省略)pull以後在本機就能夠看到這個image文件了。(docker images ls)
docker run hello-world (run會自動提取,因此上一步pull能夠省略)
2.列出hello-world下載到您的計算機的圖像
docker image ls
3.hello-world運行後,容器自動終止。下述能夠執行過的容器
docker container ls -a
4.有些容器不會自動中止,需用下法手動中止。
docker container kill [containID]
1.5 docker命令
docker命令彙總:
docker run ubuntu echo hello docker 這裏ubuntu是一個image,若是本地沒有這個image會從
Registry去下載。
docker images 當前本地有的image鏡像
docker ps 當前運行的docker的container(容器)這裏的CONTAINER ID是docker容器的id
docker stop CONTAINER ID 中止當前container
注:docker在容器內作的操做都是暫時的,爲持久化保存,進行 下列設置,實質上是產生了一個新的Image
docker commit -m 'fun' CONTAINER ID nginx-fun ( -m 'fun'是container的message,nginx-fun 是新的image的名稱)
docker rmi IMAGE ID 刪除image
容器也能夠刪除
docker ps -a 全部的container(中止了也顯示)
docker rm CONTAINER ID 刪除容器
在過去,若是您要開始編寫Python應用程序,那麼您的第一個業務是在您的計算機上安裝Python運行時。使用Docker,您能夠將可移植的Python運行時做爲映像獲取,無需安裝。
Docker拖取鏡像,鏡像運行狀態——>容器。
2.1 建立Dockerfile(例子1)
#使用一個官方的Python運行時做爲父映像
FROM python:2.7-slim
將工做目錄設置爲/app
WORKDIR /app
#將當前目錄內容複製到/app的容器中。
ADD . /app
#安裝requirements.txt中指定的任何須要的軟件包
RUN pip install --trusted-host pypi.python.org -r requirements.txt
#使端口80能夠在這個容器以外的世界上使用。
EXPOSE 80
#定義環境變量
ENV NAME World
當容器啓動時運行app.py
CMD ["python", "app.py"]
Volume:提供獨立於容器以外的持久化存儲
2.2 建立Dockerfile(例子2)
首先,在項目的根目錄下,新建一個文本文件.dockerignore,寫入下面的內容。
.gitnode_modules npm -debug.log
上面代碼表示,這三個路徑要排除,不要打包進入 image 文件。若是你沒有路徑要排除,這個文件能夠不新建。
而後,在項目的根目錄下,新建一個文本文件 Dockerfile,寫入下面的內容。
FROM node:8.4
COPY ./app
WORKDIR /app
RUN npm install--registry=https://registry.npm.taobao.org
EXPOSE 3000
上面代碼一共五行,含義以下。
FROM node:8.4:該 image 文件繼承官方的 node image,冒號表示標籤,這裏標籤是8.4,即8.4版本的 node。
COPY . /app:將當前目錄下的全部文件(除了.dockerignore排除的路徑),都拷貝進入 image 文件的/app目錄。
WORKDIR /app:指定接下來的工做路徑爲/app。
RUN npm install:在/app目錄下,運行npm install命令安裝依賴。注意,安裝後全部的依賴,都將打包進入 image 文件。
EXPOSE 3000:將容器 3000 端口暴露出來, 容許外部鏈接這個端口。
$docker search whalesay
$docker pull whalesay
$docker push myname/whalesay
容器相關操做
docker create # 建立一個容器可是不啓動它
docker run # 建立並啓動一個容器
docker stop # 中止容器運行,發送信號SIGTERM
docker start # 啓動一箇中止狀態的容器
docker restart # 重啓一個容器
docker rm # 刪除一個容器
docker kill # 發送信號給容器,默認SIGKILL
docker attach # 鏈接(進入)到一個正在運行的容器
docker wait # 阻塞到一個容器,直到容器中止運行
獲取容器相關信息
docker ps # 顯示狀態爲運行(Up)的容器
docker ps -a # 顯示全部容器,包括運行中(Up)的和退出的(Exited)
docker inspect # 深刻容器內部獲取容器全部信息
docker logs # 查看容器的日誌(stdout/stderr)
docker events # 獲得docker服務器的實時的事件
docker port # 顯示容器的端口映射
docker top # 顯示容器的進程信息
docker diff # 顯示容器文件系統的先後變化
導出容器
docker cp # 從容器裏向外拷貝文件或目錄
docker export # 將容器整個文件系統導出爲一個tar包,不帶layers、tag等信息
執行
docker exec # 在容器裏執行一個命令,能夠執行bash進入交互式
鏡像操做
docker images # 顯示本地全部的鏡像列表
docker import # 從一個tar包建立一個鏡像,每每和export結合使用
docker build -t hello_docker . # 使用Dockerfile建立鏡像(推薦)
docker commit # 從容器建立鏡像
docker rmi # 刪除一個鏡像
docker load # 從一個tar包建立一個鏡像,和save配合使用
docker save # 將一個鏡像保存爲一個tar包,帶layers和tag信息
docker history # 顯示生成一個鏡像的歷史命令
docker tag # 爲鏡像起一個別名
鏡像倉庫(registry)操做
docker login # 登陸到一個registry
docker search # 從registry倉庫搜索鏡像
docker pull # 從倉庫下載鏡像到本地
docker push # 將一個鏡像push到registry倉庫中