Docker使用

Ubuntu16.04+

在Ubuntu系統中安裝較爲簡單,官方提供了腳本供咱們進行安裝。html

sudo apt install curl
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun

執行這個命令後,腳本就會自動的將一切準備工做作好,而且把Docker CE 的Edge版本安裝在系統中。nginx

啓動Docker CEweb

sudo systemctl enable docker
sudo systemctl start docker

創建docker 用戶組docker

默認狀況下,docker 命令會使用Unix socket 與Docker 引擎通信。而只有root 用戶和docker 組的用戶才能夠訪問Docker 引擎的Unix socket。出於安全考慮,通常Ubuntu系統上不會直接使用root 用戶。所以,更好地作法是將須要使用docker 的用戶加入docker用戶組。json

# 創建docker組
sudo groupadd docker
# 將當前用戶加入docker組
sudo usermod -aG docker $USER

註銷當前用戶,從新登陸Ubuntu,輸入docker info,此時能夠直接出現信息。ubuntu

配置國內鏡像加速vim

在/etc/docker/daemon.json 中寫入以下內容(若是文件不存在請新建該文件)安全

{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ]
}

從新啓動服務bash

sudo systemctl daemon-reload
sudo systemctl restart docker

IV. Docker的C/S模式

Docker 採用了C/S 架構,包括客戶端和服務端。Docker 守護進程(Daemon)做爲服務端 
接受來自客戶端的請求,並處理這些請求(建立、運行、分發容器)。架構

Docker 守護進程通常在宿主主機後臺運行,等待接收來自客戶端的消息;Docker 客戶端則爲用戶提供一系列可執行命令,用戶用這些命令實現跟Docker 守護進程交互。咱們以前在Win10的命令行中即是最主要的客戶端:

Docker也爲咱們提供了Remote API來操做Docker的守護進程,也意味着咱們能夠經過本身的程序來控制Docker的運行。客戶端和服務端既能夠運行在一個機器上,也可經過socket 或者RESTful API 來進行通訊:

至於Docker的客戶端與守護進程之間的通訊,其鏈接方式爲socket鏈接。主要有三種socket鏈接方式:

unix:///var/run/docker.sock
tcp://host:port
fd://socketfd
完整的Docker的C/S鏈接方式的本質能夠通常表示爲以下:

V. 使用Docker
容器的基本操做
啓動一次操做容器:docker run IMAGE_NAME [COMMAND] [ARG…]

例如,啓動一個容器輸出hello world。因爲剛裝上Docker,沒有任何鏡像,因此會先下載一個最新的ubuntu18.04的docker鏡像。一次操做容器在處理完操做後會當即關閉容器。

docker run ubuntu echo 'hello world'

啓動交互式容器:docker run -t -i –name=自定義名稱 IMAGE_NAME /bin/bash

-i –interactive=true | false,默認是false

-t –tty=true | false,默認是false

–name 給啓動的容器自定義名稱,方便後續的容器選擇操做

啓動交互式的容器,就是相似虛擬機、雲主機的操做方式,操做完一個命令後仍然能夠繼續:

docker run -i -t ubuntu /bin/bash

查看容器:docker ps [-a] [-l]

省略 列出正在運行的容器

-a all 列出全部容器

-l latest 列出最近的容器

查看指定容器docker inspect name | id

name指代具體的容器名稱,id則是容器的惟一id標識。inspect命令能夠詳細的展現出容器的具體信息。

docker inspect haha

從新啓動中止的容器docker start [-i] 容器名

實際使用時,不必每次都從新啓動一個新的容器,咱們能夠從新啓動以前建立的容器,現實狀況也須要咱們這樣使用。

docker start -i haha

刪除中止的容器docker rm name | id

docker rm thirsty_kepler
docker rm upbeat_albattani

守護式容器

交互式容器在運行完命令退出後即中止,而實際中咱們經常須要可以長時間運行,即便退出也能後臺運行的容器,而守護式容器具有這一功能。守護式容器具備:

  1. 可以長期運行;
  2. 沒有交互式會話;
  3. 適合於運行應用程序和服務。

以守護形式運行容器

咱們執行完須要的操做退出容器時,不要使用exit退出,能夠利用Ctrl+P Ctrl+Q代替,以守護式形式退出容器。

 

附加到運行中的容器

退出正在運行的容器,想要再次進入,須要使用attach命令:docker attach name | id

docker attach haha

啓動守護式容器

啓動守護式容器,能夠在後臺爲咱們執行操做:docker run -d IMAGE_NAME [COMMAND] [ARG…]

當命令在後臺執行完畢,容器仍是會關閉。這裏防止容器馬上退出,寫一個腳本循環輸出「hello world」。

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

查看容器日誌

當守護式容器在後臺運行時,咱們能夠利用docker的日誌命令查看其輸出:docker logs [-f] [-t] [–tail] IMAGE_NAME

-f –follows=true | false,默認是false,顯示更新

-t –timestamps=true | false,默認是false,顯示時間戳

–tail=「all」 | 行數,顯示最新行數的日誌

查看容器內進程

對運行的容器查看其進程:docker top IMAGE_NAME

運行中容器啓動新進程

Docker的理念是一個容器運行一個服務,可是每每須要對一個服務進行監控,因此也須要在已經運行服務的容器啓動新的進程:docker exec [-d] [-i] [-t] IMAGE_NAME [COMMAND] [ARG…]

docker exec -i -t hiahia /bin/bash

中止守護式容器

發送信號中止容器:docker stop 容器名

強制中止:docker kill 容器名

VI. 案例:在容器中部署靜態網站

容器的端口映射

命令:run [-P] [-p]

-P,–publish-all=true | false,大寫的P表示爲容器暴露的全部端口進行映射;

-p,–publish=[],小寫的p表示爲容器指定的端口進行映射,有四種形式:

  • containerPort:只指定容器的端口,宿主機端口隨機映射;
  • hostPort:containerPort:同時指定容器與宿主機端口一一映射;
  • ip::containerPort:指定ip和容器的端口;
  • ip:hostPort:containerPort:指定ip、宿主機端口以及容器端口。

例如:

docker run -p 80 -i -t ubuntu /bin/bash
docker run -p 8080:80 -i -t ubuntu /bin/bash
docker run -p 0.0.0.0::80 -i -t ubuntu /bin/bash
docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash

容器中部署Nginx服務

準備環境:

# 1. 建立映射80端口的交互式容器
docker run -p 80 --name web -i -t ubuntu /bin/bash
# 2. 更新源
apt-get update
# 3. 安裝Nginx
apt-get install -y nginx
# 4. 安裝Vim
apt-get install -y vim

建立靜態頁面:

mkdir -p /var/www/html
cd /var/www/html
vim index.html

修改Nginx配置文件:

# 查看Nginx安裝位置
whereis nginx
# 修改配置文件
vim /etc/nginx/sites-enabled/default

運行Nginx:

# 啓動nginx
nginx
# 查看進程
ps -ef

驗證網站訪問:

# 退出容器
Ctrl+P Ctrl+Q
# 查看容器進程
docker top web
# 查看容器端口映射狀況
docker port web

經過宿主機地址加映射端口訪問:

VII. 鏡像基操

查看刪除鏡像

列出鏡像:docker images [OPTIONS] [REPOSITORY]

-a,–all=false,顯示全部鏡像

-f,–filter=[],顯示時過濾條件

–no-trunc=false,指定不使用截斷的形式顯示數據

-q,–quiet=false,只顯示鏡像的惟一id

查看鏡像:docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE]

-f,–format=「」

刪除鏡像:docker rmi [OPTIONS] IMAGE [IMAGE]

-f,–force=false,強制刪除鏡像

–no-prune=false,保留未打標籤的父鏡像

虛懸鏡像:既沒有倉庫名,也沒有標籤,均爲\

獲取推送鏡像

查找鏡像:docker search [OPTIONS] TEAM

–automated=false,僅顯示自動化構建的鏡像

–no-trunc=false,不以截斷的方式輸出

–filter,添加過濾條件

拉取鏡像:docker pull [OPTIONS] NAME [:TAG]

-a,–all-tags=false,下載全部的鏡像(包含全部TAG)

推送鏡像:docker push NAME [:TAG]

Docker容許上傳咱們本身構建的鏡像,須要註冊DockerHub的帳戶。

構建鏡像

構建Docker鏡像,能夠保存對容器的修改,而且再次使用。構建鏡像提供了自定義鏡像的能力,以軟件的形式打包並分發服務及其運行環境。Docker中提供了兩種方式來構建鏡像:

  • 經過容器構建:docker commit
  • 經過Dockerfile:docker build

使用commit命令構建鏡像

命令:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

參數:-a,–author=「」,指定鏡像的做者信息

​ -m,–message=「」,提交信息

​ -p,–pause=true,commit時是否暫停容器

使用Dockerfile文件構建鏡像

Docker容許咱們利用一個相似配置文件的形式來進行構建自定義鏡像,在文件中能夠指定原始的鏡像,自定義鏡像的維護人信息,對原始鏡像採起的操做以及暴露的端口等信息。好比:

# Sample Dockerfile
FROM ubuntu:16.04
MAINTAINER wgp "Kingdompin@163.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80

命令:docker build [OPTIONS] DockerFile_PATH | URL | -

參數:–force-rm=false

​ –no-cache=false

​ –pull=false

​ -q,quite=false,構建時不輸出信息

​ –rm=true

​ -t,tag=「」,指定輸出的鏡像名稱信息

VIII. 鏡像遷移
咱們製做好的鏡像,通常會遷移或分享給其餘須要的人。Docker提供了幾種將咱們的鏡像遷移、分享給其餘人的方式。推薦鏡像遷移應該直接使用Docker Registry,不管是直接使用Docker Hub仍是使用內網私有Registry均可以。使用鏡像頻率不高,鏡像數量很少的狀況下,咱們能夠選擇如下兩種方式。

上傳Docker Hub
首先,須要在Docker Hub上申請註冊一個賬號(人機驗證時須要***)。而後咱們須要建立倉庫,指定倉庫名稱。

在終端中登陸你的Docker Hub帳戶,輸入docker login,輸入用戶名密碼便可登陸成功。

查看須要上傳的鏡像,並將選擇的鏡像打上標籤,標籤名需和Docker Hub上新建的倉庫名稱一致,不然上傳失敗。給鏡像打標籤的命令以下。

docker tag <existing-image> <hub-user>/<repo-name>[:<tag>]

其中existing-image表明本地待上傳的鏡像名加tag,後面<hub-user>/<repo-name>[:<tag>]則是爲上傳更改的標籤名,tag不指定則爲latest。  

能夠看到,咱們從新爲ubuntu:16.04的鏡像打上標籤,觀察IMAGE ID可知,同一鏡像能夠擁有不一樣的標籤名。接下來,咱們利用push命令直接上傳鏡像。

docker push <hub-user>/<repo-name>:<tag>

如圖,咱們已經上傳成功。因爲以前介紹的分層存儲系統,咱們這裏是直接對已有的ubuntu鏡像進行上傳,只是從新打了標籤,因此真正上傳的只是變化的部分。  

導出文件互傳

Docker 還提供了 docker load 和 docker save 命令,用以將鏡像保存爲一個tar文件。好比此次咱們將ubuntu:latest這個鏡像保存爲tar文件。

查看本地磁盤,便可看見名爲ubuntu18.04的tar包。咱們能夠將其拷貝給其餘PC,利用load命令從新導入。

相關文章
相關標籤/搜索