CentOS系列之Docker

Docker 文檔

注:本操作是在CentOS 7平臺上

基礎操作

  • 搜索鏡像

    docker search [IMAGENAME]

docker search centos
  • pull鏡像

    docker pull [IMAGENAME]

docker pull centos
  • 推送鏡像到遠程倉庫

    docker push NAME:[Tag]

docker push hyzhou/ubuntu:3.2.3
  • 查看本地鏡像
docker images
  • 查看正在運行的容器
docker ps 
  • 查看容器的運行歷史
docker ps -a
  • KILL一個docker

    docker kill [CONTAINER ID]

docker kill d94756922b66 
  • 關閉一個docker

    docker stop [[CONTAINER ID]]

docker stop d94756922b66 
  • 啓動一個docker容器

    docker start [CONTAINER ID]

docker start d94756922b66 
  • 重啓一個docker容器

    docker restart [CONTAINER ID]

docker restart d94756922b66 
  • 拷貝docker容器中的文件到宿主機上

    ddocker cp CONTAINER:PATH HOSTPATH

docker cp d94756922b66:/homa/alvin/alvin.txt /User/alvin
  • 刪除一個容器

    docker rm [OPTIONS] CONTAINER [CONTAINER…]

    參數:-f, –force=false 強制刪除容器(使用SIGKILL)

# 刪除
docker rm d94756922b66
# 刪除所有容器
docker rm $(docker ps -a -q)
  • 刪除鏡像

    docker rmi [IMAHENAME]

docker rmi centos
  • 查看容器輸出

    docker top: 查看容器輸出

    docker top CONTAINER [ps OPTIONS]

docker top d94756922b66
  • 實時監聽容器的事件

    docker events [OPTIONS]

    命令參數:

      –since=”” 顯示某一個時間戳之後的events

      –until=”” 實時監聽到某個時間戳爲止

docker event 
  • 顯示鏡像的歷史記錄

    docker history [OPTIONS] IMAGE

    命令參數:

    –no-trunc=false 不要截斷輸出

    -q, –quiet=false 僅顯示容器ID

  • 列出鏡像中文件和目錄的變化

    docker diff CONTAINER

docker diff d94756922b66
  • 鏡像導入
docker load CentOS.tar
  • 鏡像導出
docker export mydocker mydocker.tar

運行docker鏡像

  • 創建一個運行一個容器
docker run
  • 參數
-t : 讓docker生成一個僞終端
-i : 打開標準輸入
  • 簡單實例

運行一個docker容器,並進入

docker run --name mydocker -t -i centos /bin/bash
  • 獲取一個容器的PID
docker inspect -f "{{ .State.PID }}" 容器名稱

簡單實例

docker inspect -f "{{ .State.Pid }}" mydocker

進入容器的4種方式

  • 方式一:
    nsenter可以訪問另一個進程的名稱空間。所以爲了連接到某個容器我們還需要獲取該容器的第一個進程的PID。可以使用docker inspect命令來拿到該PID。
nsenter -t [PID] -m -u -i -n -p
如果沒有`nsenter`這個命令,可執行:`yum install unit-linux` 關於nsenter的具體用法:[猛戳這裏](https://github.com/jpetazzo/nsenter)
  • 方式二:

docker attach [容器ID]

簡單實例:

docker attach 44fc0f0582d9

注:使用該命令有一個問題。當多個窗口同時使用該命令進入該容器時,所有的窗口都會同步顯示。如果有一個窗口阻塞了,那麼其他窗口也無法再進行操作。

  • 方式三:

第三種方式是大家最容易想到的一種方式:SSH(不推薦)

理由:爲什麼不需要在 Docker 容器中運行 sshd

  • 方式四:

使用docker exec進入Docker容器

docker exec -it 775c7c9ee1e1 /bin/bash 

網絡訪問

  • 隨機端口

    參數: -P

docker run -P -d nginx
  • 指定端口

    docker -p [IP:[HOST:[PORT:[UDP/TCP]]]]

    參數:-p

docker run -d -p 33699:80

數據管理

  • 默認掛載

    參數:-v [src]:[data]

docker run -d --name data_v1 -v /data centos
  • 自定義掛載

    參數:-v [src]:[data]

docker run -d --name data_v1 -v /data/centos:/data centos
  • 數據卷掛載

將兩個容器之間鏈接起來,進行數據共享

參數:--volumes-from
docker run -d -it --name mydockerv3 --volumes-from mydockerv2 centos /bin/bash

鏡像構建

第一種方式:

  • 第一步:創建一個容器
docker run -d -it --name nyNginx centos /bin/bash
  • 第二步:進入容器,並安裝必要的軟件
docker exec -it 775c7c9ee1e1 /bin/bash
  • 第三步:安裝Nginx
# 安裝epel源
rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

# 安裝Nginx
yum install -y nginx

# 修改Nginx的運行模式
echo "daemon off;" >> /etc/nginx/nginx.conf

exit
  • 第四步:提交新鏡像

    格式:
    docker commit -m “描述” [CONTAINER ID] IMAGENAME:edition [要執行命令]]

docker commit -m "MyNginx v1" 775c7c9ee1e1 nginx
  • 第五步:查看
docker images
  • 第六步:啓動
docker run --name Nginx_v1 -d -p 80:80 alvin/nginx nginx
  • 第七步:測試
curl http://www.httpaddress.com

Dockerfile

Dockerfile 語法詳解

執行命令:

echo "<h1>My name is Docker!</h1>" > index.html 

docker build -t alvin/nginx:v3 [dockerfile path]
  • Dockerfile
# Dockerfile
# This is Test Dockerfile

# Basics Image
FROM centos

# AUTHOR
MAINTAINER Alvin alvin@163.com

# Commands to be executed

# Install epel
RUN rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

# Install nginx
RUN yum install -y nginx && yum clean all

# Modify the running mode
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

# Add Default HTML
ADD index.html /use/share/nginx/html/index.html

# Set Up Port
EXPOSE 80

# Set Up Mount
VOLUME [ "/data" ]

# CMD
CMD [ "nginx" ]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章