運行容器時,當本地不存在鏡像時,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。
1.列出本地鏡像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 2e202f453940 11 days ago 179MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
hello-world latest f2a91732366c 2 months ago 1.85kB
training/webapp latest 6fae60ef3446 2 years ago 349MB
參數說明:
REPOSITORY:表示鏡像的倉庫源
TAG:鏡像的標籤
IMAGE ID:鏡像ID
CREATED:鏡像創建時間
SIZE:鏡像大小
2.使用鏡像運行容器
[root@docker ~]# docker run -ti httpd /bin/bash
root@dd34d7458e86:/usr/local/apache2# ls
bin build cgi-bin conf error htdocs icons include logs modules
root@dd34d7458e86:/usr/local/apache2#
3.拉取新鏡像
如果本地不存在使用的鏡像,Docker就會自動到鏡像倉庫去下載鏡像,使用docker pull
[root@docker ~]# docker pull ubuntu:16.04 ##下載指定版本鏡像
16.04: Pulling from library/ubuntu
1be7f2b886e8: Pull complete
6fbc4a21b806: Pull complete
c71a6f8e1378: Pull complete
4be3072e5a37: Pull complete
06c6d2f59700: Pull complete
Digest: sha256:2b80e7fbfd1b0a3784dd0e55fb6f2750ebc33e596c2ccee5201ecf018ac5ae05
Status: Downloaded newer image for ubuntu:16.04
4.搜索鏡像
可以通過docker search 命令搜索需要使用的鏡像
[root@docker ~]# docker search httpd
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 1490 [OK]
hypriot/rpi-busybox-httpd Raspberry Pi compatible Docker Image with a … 40
centos/httpd 15 [OK]
centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui… 8
armhf/httpd The Apache HTTP Server Project 8
macadmins/netboot-httpd use in combination with bruienne/bsdpy 4 [OK]
salim1983hoop/httpd24 Dockerfile running apache config 2 [OK]
lolhens/httpd Apache httpd 2 Server 2 [OK]
rgielen/httpd-image-php5 Docker image for Apache httpd with PHP 5 bas… 1 [OK]
rgielen/httpd-image-simple Docker image for simple Apache httpd based o… 1 [OK]
lead4good/httpd-fpm httpd server which connects via fcgi proxy h… 1 [OK]
fboaventura/dckr-httpd Small footprint http server to use with othe… 1 [OK]
epflidevelop/os-wp-httpd WP httpd 1 [OK]
publici/httpd httpd:latest 0 [OK]
tplatform/aws-linux-httpd24-php70 aws-linux-httpd24-php70 0 [OK]
dockerpinata/httpd 0
5.創建鏡像
在生產環境上,一般情況下,docker鏡像需要自身業務來定製,可通過兩種方式來實現docker鏡像的定製化
a.從已有創建的容器鏡像更新
b.根據自身需求編寫dockerfile創建新鏡像
更新鏡像前,先使用該鏡像創建一個容器
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 2e202f453940 11 days ago 179MB
ubuntu 16.04 0458a4468cbc 11 days ago 112MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
hello-world latest f2a91732366c 2 months ago 1.85kB
training/webapp latest 6fae60ef3446 2 years ago 349MB
[root@docker ~]# docker run -ti ubuntu:16.04 /bin/bash
root@7e0559072ced:/#
進入鏡像使用apt-get update 命令更新
[root@docker ~]# docker exec -ti 7e0559072ced bash
root@7e0559072ced:/# apt-get update
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [58.3 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [553 kB]
Get:6 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
Get:7 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]
Get:8 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]
Get:9 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [253 kB]
Get:10 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [3486 B]
Get:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
Get:12 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
Get:13 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
Get:14 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [239 kB]
Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [922 kB]
Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]
Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [747 kB]
Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [18.5 kB]
Get:20 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [5162 B]
Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [7179 B]
Fetched 24.8 MB in 32s (772 kB/s)
Reading package lists... Done
root@7e0559072ced:/# exit
exit
[root@docker ~]# docker ps |grep ubuntu
7e0559072ced ubuntu:16.04 "/bin/bash" 9 hours ago Up 9 hours naughty_jennings
說明:
此時ubuntu的容器ID:7e0559072ced,可以通過docker commit來提交容器副本
[root@docker ~]# docker commit -m="has update" -a="liu" 7e0559072ced liu/ubuntu:v2
sha256:15caed78232629df1ec5cd077d38215271bc413d12bc1500dc52cb3bc3e12c75
- -m:提交的描述信息
- -a:指定鏡像作者
- 7e0559072ced:容器的ID
- liu/ubuntu:v2指定要創建的目標鏡像名
使用docker images查看提交的新鏡像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liu/ubuntu v2 15caed782326 2 minutes ago 151MB ####提交的新鏡像
httpd latest 2e202f453940 11 days ago 179MB
ubuntu 16.04 0458a4468cbc 12 days ago 112MB
nginx latest 3f8a4339aadd 6 weeks ago 108MB
hello-world latest f2a91732366c 2 months ago 1.85kB
training/webapp latest 6fae60ef3446 2 years ago 349MB
使用新鏡像啓動一個容器
[root@docker ~]# docker run -ti liu/ubuntu:v2 /bin/bash
root@60e40fc5e5d8:/#
6.構建鏡像
使用docker build 從零開始構建一個新的鏡像,需要編寫Dockerfile容器文件,如
[root@docker ~]# vim Dockerfile
FROM centos:6.7
##指定使用哪個鏡像源
MAINTAINER Fisher "[email protected]"
##RUN告訴docker需要在鏡像內執行哪些命令
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd liulei
RUN /bin/echo 'liulei:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
~
~
在編寫Dockerfile文件時,每一個指令都會在鏡像上創建一個新的層,並且每一條指令首字母必須是大寫
然後,使用編寫的Dockerfile文件,通過docker build命令來構建一個鏡像
[root@docker ~]# docker build -t liulei/centos:6.7 .
ERRO[0000] Can't add file /root/.gnupg/S.gpg-agent to tar: archive/tar: sockets not supported
Sending build context to Docker daemon 779.4MB
Step 1/9 : FROM centos:6.7
6.7: Pulling from library/centos
cbddbc0189a0: Pull complete
Digest: sha256:7248c96de4648749c7936f203d983530e7ebdd83c3db6d47278392f18bcd7baf
Status: Downloaded newer image for centos:6.7
---> 000c5746fa52
Step 2/9 : MAINTAINER Fisher "[email protected]"
---> Running in 7de81283b6be
Removing intermediate container 7de81283b6be
---> 00e92f10a010
Step 3/9 : RUN /bin/echo 'root:123456' |chpasswd
---> Running in e2265b58e93b
Removing intermediate container e2265b58e93b
---> 0bd4ee58d0e3
Step 4/9 : RUN useradd liulei
---> Running in 846595d00078
Removing intermediate container 846595d00078
---> 600139a37c32
Step 5/9 : RUN /bin/echo 'liulei:123456' |chpasswd
---> Running in 236b3202305b
Removing intermediate container 236b3202305b
---> 984723c05b0f
Step 6/9 : RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
---> Running in c18bf04cfb8c
Removing intermediate container c18bf04cfb8c
---> 65c9fe71b1f9
Step 7/9 : EXPOSE 22
---> Running in 93f0491bde21
Removing intermediate container 93f0491bde21
---> 14ee40f132fc
Step 8/9 : EXPOSE 80
---> Running in 5be75fdead2e
Removing intermediate container 5be75fdead2e
---> f380dde783ad
Step 9/9 : CMD /usr/sbin/sshd -D
---> Running in cf4e114e9953
Removing intermediate container cf4e114e9953
---> dc64de0c25c4
Successfully built dc64de0c25c4
Successfully tagged liulei/centos:6.7
[root@docker ~]#
參數說明
- -t 表示指定要創建的目標鏡像名
- . 表示Dokerfile文件在當前目錄,也可以指定Dockerfile的絕對路徑
使用docker images 查看通過dockerfile文件創建的鏡像是否存在
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liulei/centos 6.7 dc64de0c25c4 6 minutes ago 191MB ##使用Dockerfile創建的鏡像
liu/ubuntu v2 15caed782326 21 minutes ago 151MB
httpd latest 2e202f453940 11 days ago 179MB
ubuntu 16.04 0458a4468cbc 12 days ago 112MB
nginx latest 3f8a4339aadd 6 weeks ago 108MB
hello-world latest f2a91732366c 2 months ago 1.85kB
centos 6.7 000c5746fa52 3 months ago 191MB
training/webapp latest 6fae60ef3446 2 years ago 349MB
使用Dockerfile文件創建的鏡像來運行容器
[root@docker ~]# docker run -ti dc64de0c25c4 /bin/bash
[root@c12f3fe4ea60 /]#
7.設置鏡像標籤
使用docker tag 命令爲鏡像設置標籤
[root@docker ~]# docker tag dc64de0c25c4 liulei/centos:new
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liulei/centos 6.7 dc64de0c25c4 13 minutes ago 191MB
liulei/centos new dc64de0c25c4 13 minutes ago 191MB
liu/ubuntu v2 15caed782326 28 minutes ago 151MB
httpd latest 2e202f453940 11 days ago 179MB
ubuntu 16.04 0458a4468cbc 12 days ago 112MB
nginx latest 3f8a4339aadd 6 weeks ago 108MB
hello-world latest f2a91732366c 2 months ago 1.85kB
centos 6.7 000c5746fa52 3 months ago 191MB
training/webapp latest 6fae60ef3446 2 years ago 349MB