1. 程式人生 > >Docker快速入門指南

Docker快速入門指南

epel nds .com lose nta 指南 format utf aux

鏡像操作

技術分享圖片
搜索鏡像
$ docker search centos
下載鏡像
$ docker pll centos
導入鏡像
$ docker load < ./docker/image/centos.tar.gz
導出鏡像
$ docker save centos > /tmp/centos.tar.gz
刪除鏡像
如果這個鏡像創建了容器不會被刪除

$ docker rmi centos
查看當前擁有的鏡像
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              a8493f5f50ff        
2 weeks ago 192MB nginx latest 5766334bdaa0 2 weeks ago 183MB 選項 描述 REPOSITORY 所屬倉庫 TAG 標簽 IMAGE ID 進項ID CREATED 創建時間 SIZE 鏡像創建時間 刪除所有的鏡像 $ docker rmi $(docker images -q)
View Code

容器操作

技術分享圖片
啟動一個新容器
$ docker run -i -t centos /bin/bash
啟動一個已經存在的容器
$ docker start 4253385a9655
啟動一個容器退出時不關閉
$ docker run 
--name mydocker -t -i centos /bin/bash [root@5324897fb034 /]# ps -aux|grep -v "ps -aux" # 可以看到只啟動了一個/bin/bash進程 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 11776 3084 ? Ss 05:49 0:00 /bin/bash 參數 描述 –name 鏡像的名字 -t 分配一個偽終端 -i 容器標準輸入保持打開狀態 通過容器的ID我們可以發現和容器裏面的主機名是一致的 $ docker
ps -a | grep "5324897fb034" 5324897fb034 centos "/bin/bash" 6 minutes ago Up 6 minutes mydocker 啟動一個容器在退出的時候自動刪除這個容器 $ docker run --rm -it centos /bin/bash 進入一個已經運行的容器 # 這種方式啟動,如果退出容器,則這個容器就會被退出,如果其他人登陸這個容器,則操作是同步的 $ docker attach 5324897fb034 通過nsenter訪問容器且推出時不銷毀容器 # 獲取容器的PID $ docker inspect --format "{{.State.Pid}}" 5324897fb034 15434 # 指定PID進入容器 $ nsenter -t 15434 -u -i -n -p nsenter訪問的是一個進程的命名空間 查看所有的容器 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4253385a9655 centos "/bin/bash" 6 minutes ago Up 4 minutes thirsty_visvesvaraya 選項 描述 CONTAINER ID 容器的ID IMAGE 通過哪個鏡像來運行的 COMMAND 最後執行的命令 CREATED 創建時間 STATUS 狀態 PORTS 啟動的端口 NAMES 容器的名稱,名稱默認是自動生成的 刪除一個容器 $ docker rm 307f7b240273 刪除一個正在運行的容器 $ docker rm -f 9dc6a6940ce1 停止所有正在運行的容器 docker kill $(sudo docker ps -a -q) 刪除所有容器 $ docker kill $(docker ps -a -q) 刪除狀態為退出的所有容器 $ docker rm $(docker ps -a -f status=exited -qa) 啟動一個新容器 $ docker run -i -t centos /bin/bash 啟動一個已經存在的容器 $ docker start 4253385a9655 啟動一個容器退出時不關閉 $ docker run --name mydocker -t -i centos /bin/bash [root@5324897fb034 /]# ps -aux|grep -v "ps -aux" # 可以看到只啟動了一個/bin/bash進程 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 11776 3084 ? Ss 05:49 0:00 /bin/bash 參數 描述 –name 鏡像的名字 -t 分配一個偽終端 -i 容器標準輸入保持打開狀態 通過容器的ID我們可以發現和容器裏面的主機名是一致的 $ docker ps -a | grep "5324897fb034" 5324897fb034 centos "/bin/bash" 6 minutes ago Up 6 minutes mydocker 啟動一個容器在退出的時候自動刪除這個容器 $ docker run --rm -it centos /bin/bash 進入一個已經運行的容器 # 這種方式啟動,如果退出容器,則這個容器就會被退出,如果其他人登陸這個容器,則操作是同步的 $ docker attach 5324897fb034 通過nsenter訪問容器且推出時不銷毀容器 # 獲取容器的PID $ docker inspect --format "{{.State.Pid}}" 5324897fb034 15434 # 指定PID進入容器 $ nsenter -t 15434 -u -i -n -p nsenter訪問的是一個進程的命名空間 查看所有的容器 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4253385a9655 centos "/bin/bash" 6 minutes ago Up 4 minutes thirsty_visvesvaraya 選項 描述 CONTAINER ID 容器的ID IMAGE 通過哪個鏡像來運行的 COMMAND 最後執行的命令 CREATED 創建時間 STATUS 狀態 PORTS 啟動的端口 NAMES 容器的名稱,名稱默認是自動生成的 刪除一個容器 $ docker rm 307f7b240273 刪除一個正在運行的容器 $ docker rm -f 9dc6a6940ce1 停止所有正在運行的容器 docker kill $(sudo docker ps -a -q) 刪除所有容器 $ docker kill $(docker ps -a -q) 刪除狀態為退出的所有容器 $ docker rm $(docker ps -a -f status=exited -qa)
View Code

網絡

技術分享圖片
隨機端口映射
# 啟動容器
$ docker run -d -P nginx
# 查看Nginx訪問日誌
$ docker logs c506ed2a4e65
指定端口映射
$ sudo docker run -d -p 81:80 nginx
View Code

存儲

技術分享圖片
數據卷
指令    描述
-v /data    自動生成目標目錄
-v src :dst :rw    指定目錄掛載,並指定掛載目錄的權限
$ docker run -i -t --name volume-test1 -v /data centos /bin/bash
# ls /data
# 查看掛載的目錄
$ docker inspect 80cef0fbd4f1
指定目錄掛載

$ sudo docker run -i -t -v /opt:/opt centos   
# df -h | grep "/opt"
/dev/sda2       457G   62G  373G  15% /opt
數據卷容器
一個容器訪問另一個容器的數據卷

$ docker run --name nfs -it -d -v /data centos
參數    描述
-d    讓容器在後臺運行
啟動其他的容器,使用nfs容器裏面的卷

$ docker run -it --name test1 --volumes-from nfs centos
View Code

構建Docker鏡像

技術分享圖片
手動構建
$ docker run -i -t --name webserver centos
# cd /etc/yum.repos.d/
# rpm -ivh https://mirrors.aliyun.com/centos/7.3.1611/os/x86_64/Packages/wget-1.14-13.el7.x86_64.rpm
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum -y install nginx
# vi /etc/nginx/nginx.conf
daemon off;
# exit
$ docker commit -m "webserver" a6e5ab54bf16 ansheng/webserver:v1
$ docker images | grep "webserver"
webserver           v1                  bd32c3d82378        39 seconds ago      363MB
$ docker run -d -p 80:80 webserver:v1 nginx
$ curl -I 127.0.0.1:82
HTTP/1.1 200 OK
通過DockerFile構建
$ cd /tmp/
$ mkdir webserver
$ cd webserver/
$ echo "Hello, World!" > index.html
$ vim Dockerfile
# This docker file
# VERSION
# Author: An Sheng
# Base image
FROM centos

#Maintainer
MAINTAINER ansheng [email protected]

# Commands
RUN rpm -ivh https://mirrors.aliyun.com/centos/7.3.1611/os/x86_64/Packages/wget-1.14-13.el7.x86_64.rpm
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum install nginx -y
ADD index.html /usr/share/nginx/html/index.html
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]
$ docker build -t webserver:v2 ./
運行容器

$ docker run -d -p 80:80 webserver:v2
$ curl -I 127.0.0.1:80
HTTP/1.1 200 OK
Dockerfile描述
指令    描述
FROM    指定基礎鏡像
MAINTAINER    維護者信息
RUN    執行的命令
ADD    把本地文件copy到鏡像中
WORKDIR    指定工作目錄
VOLUME    目錄掛載
EXPOSE    啟動的端口
CMD    最後執行的指令
View Code

其他操作

技術分享圖片
時區問題
[root@d4e104c000c2 ~]# date
Sat Apr 29 08:51:51 UTC 2017
[root@d4e104c000c2 ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
[root@d4e104c000c2 ~]# date
Sat Apr 29 16:52:28 CST 2017
字符集問題
LANG=en_US.UTF-8
普通用戶使用docker
sudo gpasswd -a ${USER} docker
View Code

Docker快速入門指南