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 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
執行命令:
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" ]