docker基本操做

docker三要素

Imagenginx

鏡像,至關於模板。Docker 鏡像是靜態的、能夠被用戶互相分享的文件,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。web

Containerdocker

容器,就是類建立的實例,依據鏡像這個模板建立出來的實體。容器的實質是進程,但與直接在宿主執行的進程不一樣,容器進程運行在一個隔離的環境,有屬於本身的獨立的命名空間,能夠擁有本身的root 文件系統、本身的網絡配置、本身的進程空間,甚至本身的用戶ID 空間。但使用起來,就好像是在一個獨立於宿主的系統下操做同樣。shell

Repositoryjson

鏡像倉庫,供用戶存儲下載鏡像。vim

docker存儲

分層存儲,鏡像構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在本身這一層。能夠用以前構建好的鏡像做爲基礎層,而後進一步添加新的層,以定製本身所需的內容,構建新的鏡像(基於容器構建鏡像)。centos

docker安裝與啓動

# yum install -y docker
# systemctl start docker

配置docker加速器

# vim /etc/docker/daemon.json
{
 "registry-mirrors": [
 "https://registry.docker-cn.com"
  ]
}
# systemctl restart docker

docker基本命令

# docker version  #查看docker信息
# docker info      #查看docker信息
# docker images #查看本地鏡像
# docker search  #查找鏡像
# docker pull       #獲取鏡像 默認鏡像標籤latest
# docker run  #建立並運行鏡像 run=create+start 
  -it = -i +-t  以交互模式進入容器
  -i 表示打開並保持stdout
  -t表示分配一個終端 
  -d 後臺運行容器
  --name 指定容器名
# docker start/stop/pause/unpause   #啓動/中止/暫停/恢復
# docker ps #查看運行的容器 
-a 全部容器 
-l 最近容器
# crtl+d 或exit   #退出正在運行容器,退出後容器爲關閉狀態
# ctrl+p ctrl+q   #退出正在運行容器,退出後容器爲up狀態
# docker exec  # 進入運行的容器
# docker logs  #查看日誌信息
# docker rm [container ID]   # 刪除容器
# docker rmi [image id]   # 刪除鏡像
# docker push    #上傳鏡像
# docker load/docker save   # 鏡像載入/保存
# docker import/docker export # 容器導入與導出

Nginx示例

# docker search nginx
# docker pull nginx   # 默認標籤latest (# docker pull nginx:latest)
# docker images
# docker run --name web1 -it nginx:latest /bin/bash
(# docker run --name web1  &&  # docker exec -it web1 /bin/bash)
# docker logs web1 
# docker run -p 8080:80 -d nginx  #將80端口映射爲8080,或者80:80仍是原先的80端口,不能夠不寫
# netstat -anp | grep 8080  #端口已經開啓
http://192.168.61.129:8080/ #測試

容器鏡像製做

1.基於容器製做鏡像bash

# docker commit -p  eager_wescoff   #暫停ager_wescoff 容器並保存鏡像
# docker images # 查看保存的鏡像

# docker tag 81d993fe7d7b wh_k/nginx:v1.1 
#打標籤  81d993fe7d7b 鏡像ID,wh_k/nginx 倉庫,v1.1 版本
# docker images

# docker tag wh_k/nginx:v1.1 wh_k/nginx:v1.1_new  
#打第二個標籤,一個鏡像能夠包含多個標籤,一個標籤只能屬於一個鏡像。
# docker images

# docker image rm wh_k/nginx:v1.1_new  # 刪除標籤wh_k/nginx:v1.1_new
# docker images

# docker login --username=350161345@qq.com registry.cn-shanghai.aliyuncs.com  # 登陸阿里雲鏡像管理控制檯
# docker tag 81d993fe7d7b registry.cn-shanghai.aliyuncs.com/wh_k/nginx:v1.1_new # 打上阿里雲鏡像對應標籤
# docker images
# docker push  registry.cn-shanghai.aliyuncs.com/wh_k/nginx:v1.1_new # 上傳鏡像至阿里雲
# docker pull registry.cn-shanghai.aliyuncs.com/wh_k/nginx:v1.1_new #下載鏡像

2.dockerfile製做鏡像網絡

# mkdir /wh_k/mynginx
# cd  /wh_k/mynginx
# wget   http://nginx.org/download/nginx-1.15.2.tar.gz

# vim Dockerfile

FROM centos

RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
ADD nginx-1.15.2.tar.gz /usr/src/
WORKDIR /usr/src/nginx-1.15.2

RUN mkdir /usr/local/nginx \
        && ./configure --prefix=/usr/local/nginx && make && make install \
        && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \
        && nginx

RUN rm -rf /usr/src/nginx-1.15.2

EXPOSE 80

# docker images
# docker run -dit -p 8081:80 --name nginx nginx:v2  #建立並運行nginx
# netstat -anp | grep 8081

# docker exec -it nginx  /bin/bash  #進入容器nginx
[root@fec404ddc5fd nginx-1.15.2]# nginx    #啓動服務
http://192.168.61.129:8081/  #測試

3.dockerfile文件說明ide

FROM:指定基礎鏡像(FROM是必備的指令,而且必須爲第一條指令)。

RUN: 用來執行命令行命令。其基本格式:

shell格式: RUN  <命令>  ,輸入在bash環境中的命令便可,一個dockerfile容許使用RUN不得超過127層,因此,使用一次RUN, 使用 ‘ \ ’ 換行,使用‘ && ’執行下一條命令。通常使用此種格式;
exec格式: RUN  <"可執行文件", "參數1", "參數2">,此種方式像是函數調用中的格式;

COPY: 複製文件。 其基本格式:

格式1:COPY <源路徑>...<目標路徑>
格式2:COPY [「<源路徑1>」,....."<目標路徑>"]

ADD: 更高級的複製文件,在COPY的基礎上增長了一些功能,若是複製的是壓縮包的話,會直接解壓,而不須要在使用RUN解壓;

WORKDIR: 指定工做目錄。其基本格式:

格式1: WORKDIR <工做目錄路徑>

CMD:容器啓動命令。其基本格式:

shell格式: CMD <命令>
exec格式: CMD ["可執行文件", "參數1", "參數2"...]
參數列表格式: CMD [「參數1」, 「參數2」...],在指定了ENTRYPOINT指令後,用CMD指定具體的參數

ENTRYPOINT: 入口點。其基本格式分爲exec和shell,

ENTRYPOINT的目的和CMD同樣,都是在指定容器啓動程序及參數。ENTRYPOINT在運行中能夠替代,不過比CMD繁瑣,須要經過docker run 的參數--entrypoint 來指定。當指定了ENTRYPOINT後,CMD的含義就發生了改變,不在是直接運行其命令,而是將CMD的內容做爲參數傳遞給ENTRYPOINT指令。其執行時就變成了:  <ENTRYPOINT> "<CMD>"

ENV: 設置環境變量。(均可以使用這裏使用的變量)其基本格式:

格式1:ENV <key> <value>
格式2:ENV <key1>=<value1> <key2>=<value>...

ARG: 構建參數。構建參數和ENV的效果同樣,都是設置環境變量,所不一樣的是ARG所構建的環境變量在未來容器運行時是不存在的。其基本格式:

格式1: ARG <參數名> [=<默認值>]
格式2: 該默認值能夠在構建命令 docker build  中用 --build-arg <參數名>=<值> 來覆蓋

VOLUME: 定義匿名卷。 其基本格式:

格式1: VOLUME ["<路徑1>", "<路徑2>"...]
格式2: VOLUME <路徑>

EXPOSE: 暴露端口。EXPOSE指令是聲明運行時容器所提供的端口,在啓動容器時不會在由於這個聲明而開啓端口。 其基本格式:

格式1: EXPOSE <端口1> [<端口2>...]

USER: 指定當前用戶。USER是幫助你切換到指定用戶。 其基本格式:

格式1: USER <用戶名>

HEALTCHECK: 健康檢查,判斷容器的狀態是否正常。 其基本格式:

格式1: HEALTCHECK [選項] CMD <命令> :設置檢查容器健康情況的命令
格式2: HEALTCHECK NONE: 若是基礎鏡像有健康檢查指令,使用此格式能夠屏蔽掉其健康檢查指令
相關文章
相關標籤/搜索