1. 程式人生 > >Docker容器的簡單操作及應用部署

Docker容器的簡單操作及應用部署

1.什麼是虛擬化

        虛擬化(Virtualization)是一種資源管理技術 ,虛擬化技術種類很多,例如:軟體虛擬化、硬體虛擬化、記憶體虛擬化、網路虛擬化(vip)、桌面虛擬化、服務虛擬化、虛擬機器等等 。

2.什麼是Docker

       Docker 是一個Go 語言實現開源專案。 Docker 的基礎是 Linux 容器(LXC)等技術。使用者操作 Docker 的容器就像操作一個快速輕量級的虛擬機器一樣簡單。

3.容器與虛擬機器比較

     容器是在作業系統層面上實現虛擬化,直接複用本地主機的作業系統,而傳統方式則是在硬體層面實現。Docker優勢體現為啟動速度快、佔用體積小。

關於Docker的一系列操作流程。

systemctl命令是系統服務管理器指令

啟動docker:

systemctl start docker

停止docker:

systemctl stop docker

重啟docker:

systemctl restart docker

檢視docker狀態:

systemctl status docker

開機啟動:

systemctl enable docker

檢視docker概要資訊

docker info

檢視docker幫助文件

docker --help

映象相關命令

檢視docker映象

docker images

搜尋docker映象

docker search

拉取映象就是從中央倉庫中下載映象到本地

docker pull 映象名稱

按映象ID刪除映象

docker rmi 映象ID

刪除所有映象

docker rmi `docker images -q`

容器相關命令

檢視正在執行的容器

docker ps

檢視所有容器

docker ps –a

檢視最後一次執行的容器

docker ps –l

檢視停止的容器

docker ps -f status=exited

建立與啟動容器

建立容器常用的引數說明:

建立容器命令:docker run

-i:表示執行容器

-t:表示容器啟動後會進入其命令列。加入這兩個引數後,容器建立就能登入進去。即分配一個偽終端。

--name :為建立的容器命名。

-v:表示目錄對映關係(前者是宿主機目錄,後者是對映到宿主機上的目錄),可以使用多個-v做多個目錄或檔案對映。注意:最好做目錄對映,在宿主機上做修改,然後共享到容器上。

-d:在run後面加上-d引數,則會建立一個守護式容器在後臺執行(這樣建立容器後不會自動登入容器,如果只加-i -t兩個引數,建立後就會自動進去容器)。

-p:表示埠對映,前者是宿主機埠,後者是容器內的對映埠。可以使用多個-p做多個埠對映

(1)互動式方式建立容器

docker run -it --name=容器名稱 映象名稱:標籤 /bin/bash

這時我們通過ps命令檢視,發現可以看到啟動的容器,狀態為啟動狀態

退出當前容器

exit

(2)守護式方式建立容器:

docker run -di --name=容器名稱 映象名稱:標籤

登入守護式容器方式:

docker exec -it 容器名稱 (或者容器ID)  /bin/bash

停止與啟動容器

停止容器:

docker stop 容器名稱(或者容器ID)

啟動容器:

docker start 容器名稱(或者容器ID)

檔案拷貝

如果我們需要將檔案拷貝到容器內可以使用cp命令

docker cp 需要拷貝的檔案或目錄 容器名稱:容器目錄

也可以將檔案從容器內拷貝出來

docker cp 容器名稱:容器目錄 需要拷貝的檔案或目錄

目錄掛載

我們可以在建立容器的時候,將宿主機的目錄與容器內的目錄進行對映,這樣我們就可以通過修改宿主機某個目錄的檔案從而去影響容器。建立容器 新增-v引數 後邊為 宿主機目錄:容器目錄,例如:

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

如果你共享的是多級的目錄,可能會出現許可權不足的提示。

這是因為CentOS7中的安全模組selinux把許可權禁掉了,我們需要新增引數 --privileged=true 來解決掛載的目錄沒有許可權的問題

檢視容器IP地址

我們可以通過以下命令檢視容器執行的各種資料

docker inspect 容器名稱(容器ID) 

也可以直接執行下面的命令直接輸出IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)

刪除容器

刪除指定的容器:

docker rm 容器名稱(容器ID)

4 應用部署

4.1 MySQL部署

(1)拉取mysql映象

docker pull centos/mysql-57-centos7

(2)建立容器

docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

-p 代表埠對映,格式為  宿主機對映埠:容器執行埠

-e 代表新增環境變數  MYSQL_ROOT_PASSWORD 是root使用者的登陸密碼

(3)遠端登入mysql

連線宿主機的IP ,指定埠為33306

4.2 tomcat部署

(1)拉取映象

docker pull tomcat:7-jre7

(2)建立容器

建立容器  -p表示地址對映

docker run -di --name=mytomcat -p 9000:8080 
-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

4.3 Nginx部署

(1)拉取映象

docker pull nginx

(2)建立Nginx容器

docker run -di --name=mynginx -p 80:80 nginx

4.4 Redis部署

(1)拉取映象

docker pull redis

(2)建立容器

docker run -di --name=myredis -p 6379:6379 redis

5 遷移與備份

5.1 容器儲存為映象

我們可以通過以下命令將容器儲存為映象

docker commit mynginx mynginx_i

5.2 映象備份

我們可以通過以下命令將映象儲存為tar 檔案

docker  save -o mynginx.tar mynginx_i

5.3 映象恢復與遷移

首先我們先刪除掉mynginx_img映象 然後執行此命令進行恢復

docker load -i mynginx.tar

-i 輸入的檔案

執行後再次檢視映象,可以看到映象已經恢復

6 Dockerfile

6.1 什麼是Dockerfile

Dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立一個新的映象。

1、對於開發人員:可以為開發團隊提供一個完全一致的開發環境; 2、對於測試人員:可以直接拿開發時所構建的映象或者通過Dockerfile檔案構建一個新的映象開始工作了; 3、對於運維人員:在部署時,可以實現應用的無縫移植。

6.2 常用命令

命令 作用
FROM image_name:tag 定義了使用哪個基礎映象啟動構建流程
MAINTAINER user_name 宣告映象的建立者
ENV key value 設定環境變數 (可以寫多條)
RUN command 是Dockerfile的核心部分(可以寫多條)
ADD source_dir/file dest_dir/file 將宿主機的檔案複製到容器內,如果是一個壓縮檔案,將會在複製後自動解壓
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有壓縮檔案並不能解壓
WORKDIR path_dir 設定工作目錄

使用指令碼建立映象

步驟:

(1)建立目錄

mkdir –p /usr/local/dockerjdk8

(2)下載jdk-8u171-linux-x64.tar.gz並上傳到伺服器(虛擬機器)中的/usr/local/dockerjdk8目錄

(3)建立檔案Dockerfile vi Dockerfile

#依賴映象名稱和ID
FROM centos:7
#指定映象建立者資訊
MAINTAINER ITCAST
#切換工作目錄
WORKDIR /usr
RUN mkdir  /usr/local/java
#ADD 是相對路徑jar,把java新增到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/

#配置java環境變數
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

(4)執行命令構建映象

docker build -t='jdk1.8' .

注意後邊的空格和點,不要省略

(5)檢視映象是否建立完成

docker images

7 Docker私有倉庫

7.1 私有倉庫搭建與配置

(1)拉取私有倉庫映象(此步省略)

docker pull registry

(2)啟動私有倉庫容器

docker run -di --name=registry -p 5000:5000 registry

(4)修改daemon.json

vi /etc/docker/daemon.json

新增以下內容,儲存退出。

{"insecure-registries":["192.168.184.141:5000"]} 

此步用於讓 docker信任私有倉庫地址

(5)重啟docker 服務

systemctl restart docker

映象上傳至私有倉庫

(1)標記此映象為私有倉庫的映象

docker tag jdk1.8 192.168.184.141:5000/jdk1.8

(2)再次啟動私服容器

docker start registry

(3)上傳標記的映象

docker push 192.168.184.141:5000/jdk1.8