Docker入門(一)

做者: 麥冬 白鯨魚

docker 是什麼

Docker 入門教程html

Docker容器是與系統其餘部分隔離開的一系列進程,運行這些進程所需的全部文件都由另外一個鏡像提供,從開發到測試再到生產的整個過程當中,Linux 容器都具備可移植性和一致性。相對於依賴重複傳統測試環境的開發渠道,容器的運行速度要快得多,而且支持在多種主流雲平臺(PaaS)和本地系統上部署。Docker容器很好地解決了「開發環境能正常跑,一上線就各類崩」的尷尬。

圖片描述

  • 輕量:容器是進程級的資源隔離,而虛擬機是操做系統級的資源隔離,因此Docker容器相對於虛擬機來講能夠節省更多的資源開銷,由於Docker容器再也不須要GuestOS這一層操做系統了。
  • 快速:容器的啓動和建立無需啓動GuestOS,能夠實現秒級甚至毫秒級的啓動。
  • 可移植性:Docker容器技術是將應用及所依賴的庫和運行時的環境技術改造包成容器鏡像,能夠在不一樣的平臺運行。
  • 自動化:容器生態中的容器編排工做(如:Kubernetes)可幫助咱們實現容器的自動化管理。

docker三大核心

圖片描述
圖片描述
vue

常見應用場景

  • 對應用進行自動打包和部署
  • 建立輕量、私有的PAAS環境
  • 自動化測試和持續整合與部署
  • 部署和擴展web應用、數據庫和後端服務

基礎部分

安裝

Docker操做手冊
寫的很詳細node

二進制安裝

通常安裝方法

這裏說下二進制安裝,按照官網方式Install static binarieslinux

安裝docker在Centos基本上就是yuminstall便可的一件事情(在ubuntu也是apt-get很容易安裝),可是在實際環境中,可能遇到企業內網以內沒法鏈接,或者安全合規審查等問題,加之下載增長了安裝時間,所以二進制方式安裝變成了一種實際的須要。下面是官網的安裝方式

圖片描述

有些時候會在sudo docker &時候出現錯誤
能夠執行如下下面命令再試。git

rm -rf /var/lib/docker

腳本傻瓜式安裝

這裏提供寫好的腳本,能夠把腳本和下載的二進制文件放在同一目錄下,而後運行sh install-docker.shgithub

項目 下載地址
二進制方式安裝docker腳本 http://osgp88fat.bkt.clouddn....
二進制的docker安裝文件 https://download.docker.com/l...

程序是否正常

sudo docker info

運行容器

docker run命令提供了Docker容器的建立到啓動的功能web


若是要在命令行下建立一個咱們能與之進行交互的容器,而不是一個運行後臺服務的容器,則-i -t這兩個參數是必不可少的基本參數。vue-cli

apt-get update && apt-get install vim  //在容器中安裝vim
exit //  推出容器,返回到Ubuntu容器的宿主機命令行提示符中

圖片描述

查看當前系統中容器列表

sudo docker ps -a

圖片描述
加上-a 會顯示正在運行的 和已經中止的全部容器docker

容器命名

通常docker會爲建立的容器生成隨機名稱,生成指定名稱用--nameshell

sudo docker run --name jxtreehouse -i -t ubuntu /bin/bash

圖片描述

附着到容器上

像上面那樣,docker容器從新啓動時候,會沿用docker run 命令的參數來運行,所以咱們容器從新啓動後會運行一個交互式會話shell。
固然,咱們也能夠用docker attach命令 從新附着到該容器的會話上

sudo docker attach jxtreehouse

圖片描述

建立守護式容器

除了交互式運行的容器,咱們也能夠建立長期運行的容器:守護式容器
特色:

  • 沒有交互會話
  • 很是適合運行應用程序和服務

因此,大多數時候咱們都須要守護式運行咱們的容器

sudo docker run --name jxbooks -d  ubuntu /bin/sh -c "while true;do echo hello jx;sleep 1; done"

圖片描述
從上面運行結果咱們能夠看出,docker run命令並無像上一個容器那樣將主機的控制檯附着到新的shell會話上,僅僅返回一個容器ID而已,咱們仍是在主機的命令中。

容器內部運行狀況

### 查看日誌

sudo docker jxbooks
sudo docker logs jxbooks  // 獲取守護式容器日誌
sudo docker logs -f jxbooks // 跟蹤守護式容器的日誌(-f 相似 tail -f)
sudo docker logs -ft jxbooks // 跟蹤守護式容器的最新日誌 (加上時間戳)

查看容器內的進程

sudo docker top jxbooks

在容器內部運行進程

在Docker3.1以後,咱們能夠經過docker exec命令在容器內部額外啓動新程序。
能夠在容器內運行的進程有兩種:

  • 後臺任務
  • 交互式任務

後臺任務例子:

sudo docker exec -d jxbooks touch /etc/new_config_file

在jxbooks容器中啓動一個如打開shell的交互任務:

sudo docker exec -t -i jxbooks /bin/bash

和交互式容器同樣,這裏-t -i 標誌爲咱們執行的進程建立TTY並捕捉STDIN。

中止守護式容器

sudo docker stop jxbooks

jxbooks也可用容器的ID來替代(查看id 可用 docker ps -a

自動重啓容器

sudo docker run --restart=always --name jxbooks -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1;done"

--restart=always 不管容器的退出代碼是什麼,docker都會自動重啓容器
還能夠設置成 on-failure (只有當容器退出代碼爲非 0 時候 纔會自動重啓)

--restart=on-failture:5 //重啓次數參數

深刻容器

sudo docker inspect jxbooks

刪除容器

sudo docker rm  容器名或id //注意運行中的docker容器沒法刪除,必須先docker stop 或者 docker kill 中止容器

刪除全部容器

docker rm `docker ps -a -q`

建立鏡像

查看這個docker 入門
.gitignore

.git
node_modules
npm-debug.log

Dockerfile

FROM node:8.4
COPY . /app
WORKDIR /app
RUN ["npm", "install"]
EXPOSE 7001/tcp
zk@zk-TM1604:~/data-screen$ docker image build -t data-screen:0.0.1 .
docker image ls

zk@zk-TM1604:~/data-screen$ docker save data-screen:0.0.1 | gzip > data-screen.tar.gz
zk@zk-TM1604:~/data-screen$ scp -r data-screen.tar.gz root@118.24.153.55:/root/

圖片描述
這時候咱們項目的根目錄下就有了一個docker的鏡像壓縮文件

導入docker鏡像並開發

在合做開發時候,咱們拿到一個項目打包好的docker鏡像(原開發環境爲ubuntu,咱們這裏拿到鏡像後 還用ubuntu作演示,實際開發時候,你多是在windows 或者centos中拿到這個項目鏡像來開發)
好比壓縮包名datascreen.tar
這裏我用遠程服務器演示下:
圖片描述

咱們在根目錄/data文件夾中建一個docker文件夾,進入文件夾,新建tmp文件夾 ,在docker同級目錄下新建 datascreen 文件夾 咱們將把項目docker鏡像文件映射到這裏

圖片描述

導入容器

sudo docker load < ${PATH}/datascreen.tar  //加載docker打包的鏡像 到本宿主機

運行Docker

sudo docker images //獲取image ID
sudo docker run -d -it -p 7001:7001 -v /data/docker/tmp/:/tmp/ {image id} /bin/bash

/data/docker/tmp/ 映射到的宿主機上的目錄
/tmp/ {image id} /bin/bash 鏡像中的目錄

啓動容器

sudo docker ps  //查看運行中的容器
sudo docker start f1737f42f13b  //f1737f42f13b 是容器id
sudo docker exec -it f1737f42f13b /bin/bash

運行data-screen

cd data-screen/
nohup ./auto-run.sh &

圖片描述
auto-run.sh腳本中的內容,主要是啓動mongod 和用node啓動入口文件index.js (這個項目是一個nodejs的後臺項目)

中止docker 容器

(!危險) 若是是運行在應用上的程序和服務的守護式容器 注意不要隨意中止

sudo docker ps
sudo docker stop <CONTAINER ID>

圖片描述

參考

Docker操做手冊
第一本docker書
[Docker — 從入門到實踐]()
Docker 入門教程
Docker 微服務教程
基於docker+gunicorn部署sanic項目
vue-cli3 項目從搭建優化到docker部署

相關文章
相關標籤/搜索