镜像列表
转载链接我们可以使用 docker images
来列出本地主机上的镜像:
lusifer@UbuntuBase:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 15.10 9b9cb95443b5 15 months ago 137MB
training/webapp latest 6fae60ef3446 2 years ago 349MB
选项说明:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG
来定义不同的镜像。
所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:
docker run -it ubuntu:15.10 /bin/bash
如果要使用版本为14.04的ubuntu系统镜像来运行容器时,命令如下:
docker run -it ubuntu:14.04 /bin/bash
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search
命令来搜索镜像。比如我们需要一个 httpd
的镜像来作为我们的 web
服务。我们可以通过 docker search
命令搜索 httpd
来寻找适合我们的镜像。
lusifer@UbuntuBase:~$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 6759 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 141 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 114 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 88 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 80 [OK]
neurodebian NeuroDebian provides neuroscience research... 40 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components... 32 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images... 22 [OK]
tutum/ubuntu Simple Ubuntu docker images with SSH access 19
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 17 [OK]
ppc64le/ubuntu Ubuntu is a Debian-based Linux operating s... 11
aarch64/ubuntu Ubuntu is a Debian-based Linux operating s... 9
i386/ubuntu Ubuntu is a Debian-based Linux operating s... 8
darksheer/ubuntu Base Ubuntu Image -- Updated hourly 3 [OK]
codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc... 3 [OK]
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 2 [OK]
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 1 [OK]
smartentry/ubuntu ubuntu with smartentry 0 [OK]
1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0
thatsamguy/ubuntu-build-image Docker webapp build images based on Ubuntu 0
ossobv/ubuntu Custom ubuntu image from scratch (based on... 0
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 0 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu d... 0
defensative/socat-ubuntu 0 [OK]
说明:
- NAME:镜像仓库源的名称
- DESCRIPTION:镜像的描述
- OFFICIAL:是否docker官方发布
更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器:
lusifer@UbuntuBase:~$ docker run -it ubuntu:15.10 /bin/bash
root@9a3dcafd7a83:/# apt-get update
这里要更新数据源:但是没有vi或者vim编辑器
用echo的方法:
先用
/etc/apt/sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse > /etc/apt/sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse >> /etc/apt/sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse >> /etc/apt/sources.list
echo deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverseecho>> /etc/apt/sources.list
Ign http://archive.ubuntu.com wily InRelease Ign http://archive.ubuntu.com wily-updates InReleaseIgn http://archive.ubuntu.com wily-security InReleaseIgn http://archive.ubuntu.com wily Release.gpgIgn http://archive.ubuntu.com wily-updates Release.gpgIgn http://archive.ubuntu.com wily-security Release.gpgIgn http://archive.ubuntu.com wily ReleaseIgn http://archive.ubuntu.com wily-updates ReleaseIgn http://archive.ubuntu.com wily-security Release
在运行的容器内使用 apt-get update
命令进行更新。
在完成操作之后,输入 exit
命令来退出这个容器。
此时ID为 9a3dcafd7a83
的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit
来提交容器副本。
lusifer@UbuntuBase:~$ docker commit -m="has update" -a="lusifer" 9a3dcafd7a83 lusifer/ubuntu:v2
sha256:2642b4944b285974e5f007f30bc33b651220ea9931982c3c53b61a8f8fd5011b
各个参数说明:
- -m:提交的描述信息
- -a:指定镜像作者
- 9a3dcafd7a83:容器ID
- lusifer/ubuntu:v2:指定要创建的目标镜像名
我们可以使用 docker images
命令来查看我们的新镜像 lusifer/ubuntu:v2:
lusifer@UbuntuBase:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lusifer/ubuntu v2 2642b4944b28 2 minutes ago 137MB
ubuntu 14.04 dea1945146b9 7 weeks ago 188MB
ubuntu 15.10 9b9cb95443b5 15 months ago 137MB
training/webapp latest 6fae60ef3446 2 years ago 349MB
使用我们的新镜像 lusifer/ubuntu 来启动一个容器:
lusifer@UbuntuBase:~$ docker run -it lusifer/ubuntu:v2 /bin/bash
root@060f7af5fbec:/#
Dockerfile
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
docker build
命令用于从Dockerfile构建映像。可以在 docker build
命令中使用 -f
标志指向文件系统中任何位置的Dockerfile。
docker build -f /path/to/a/Dockerfile
Dockerfile文件说明
说明不区分大小写,但必须遵循建议使用大写字母的约定。
Docker 以从上到下的顺序运行 Dockerfile 的指令。为了指定基本映像,第一条指令必须是 FROM
。
一个声明以#
字符开头则被视为注释。可以在Docker文件中使用RUN
,CMD
,FROM
,EXPOSE
,ENV
等指令。
在这里列出了一些常用的说明。
FROM
该指令用于设置后续指令的基本映像。有效的 Dockerfile 必须使用FROM
作为其第一条指令。
FROM ubuntu
MAINTAINER
指定镜像的作者
MAINTAINER <name>
RUN
该指令用于执行当前映像的任何命令。
RUN /bin/bash -c 'echo "Hello World"'
CMD
这用于执行映像的应用程序。应该以下列形式总是使用CMD
CMD ["executable", "param1", "param2"]
这是使用CMD的首选方法。Dockerfile文件中只能有一个CMD。如果使用多个CMD,则只会执行最后一个CMD。
例:CMD [“/bin/echo”, “this is a echo test ”]
COPY
该指令用于将来自源的新文件或目录复制到目的地的容器的文件系统。
COPY abc/ /xyz
规则:
source
路径必须在构建的上下文之内。无法使用COPY ../something /something
,因为docker构建的第一步是将上下文目录(和子目录)发送到 docker 守护程序。如果
source
是目录,则会复制目录的全部内容,包括文件系统元数据。
WORKDIR
_WORKDIR_用于为_Dockerfile_中的RUN
,CMD
和COPY
指令设置工作目录。如果工作目录不存在,它默认将会创建。
我们可以在_Dockerfile_文件中多次使用WORKDIR
。
备注:可以简单理解为 cd
命令,但是如果目录不存在它会自动创建。
构建镜像
我们使用命令 docker build
, 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
root@UbuntuBase:/usr/local/docker/ubuntu# cat Dockerfile
FROM ubuntu
MAINTAINER Lusifer
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd lusifer
RUN /bin/echo 'lusifer:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build
命令来构建一个镜像。
root@UbuntuBase:/usr/local/docker/ubuntu# docker build -t lusifer/ubuntu:latest .
Sending build context to Docker daemon 2.048kB
Step 1/9 : FROM ubuntu
latest: Pulling from library/ubuntu
ae79f2514705: Pull complete
5ad56d5fc149: Pull complete
170e558760e8: Pull complete
395460e233f5: Pull complete
6f01dc62e444: Pull complete
Digest: sha256:506e2d5852de1d7c90d538c5332bd3cc33b9cbd26f6ca653875899c505c82687
Status: Downloaded newer image for ubuntu:latest
---> 747cb2d60bbe
Step 2/9 : MAINTAINER Lusifer
---> Running in bdfec0486691
---> 40da56c4c0ad
Step 3/9 : RUN /bin/echo 'root:123456' |chpasswd
---> Running in 5baae880ffce
---> bc898d1fc903
Step 4/9 : RUN useradd lusifer
---> Running in 83b9ca8c7e59
---> 0e52bfd4fdec
Step 5/9 : RUN /bin/echo 'lusifer:123456' |chpasswd
---> Running in 8e04b80de324
---> 229189d4fce2
Step 6/9 : RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
---> Running in 36c09a3d36f4
---> dc2b33c0216e
Step 7/9 : EXPOSE 22
---> Running in 19b391acb5d8
---> 7a9a0480fb19
Step 8/9 : EXPOSE 80
---> Running in fed8dad6ac5f
---> 70ff9da03753
Step 9/9 : CMD /usr/sbin/sshd -D
---> Running in fa89f7d2f1dc
---> 6cdd9c6b840d
Removing intermediate container 8e04b80de324
Removing intermediate container 36c09a3d36f4
Removing intermediate container 19b391acb5d8
Removing intermediate container fed8dad6ac5f
Removing intermediate container fa89f7d2f1dc
Removing intermediate container bdfec0486691
Removing intermediate container 5baae880ffce
Removing intermediate container 83b9ca8c7e59
Successfully built 6cdd9c6b840d
Successfully tagged lusifer/ubuntu:latest
参数说明:
- -t:指定要创建的目标镜像名
- .:Dockerfile 文件所在目录,可以指定 Dockerfile 的绝对路径
使用 docker images
查看创建的镜像已经在列表中存在,镜像ID为 6cdd9c6b840d
root@UbuntuBase:/usr/local/docker/ubuntu# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lusifer/ubuntu latest 6cdd9c6b840d 3 minutes ago 122MB
lusifer/ubuntu v2 2642b4944b28 About an hour ago 137MB
ubuntu latest 747cb2d60bbe 3 weeks ago 122MB
ubuntu 14.04 dea1945146b9 7 weeks ago 188MB
ubuntu 15.10 9b9cb95443b5 15 months ago 137MB
training/webapp latest 6fae60ef3446 2 years ago 349MB
我们可以使用新的镜像来创建容器
root@UbuntuBase:/usr/local/docker/ubuntu# docker run -it lusifer/ubuntu /bin/bash
root@f68cc2d65679:/# id lusifer
uid=1000(lusifer) gid=1000(lusifer) groups=1000(lusifer)
从上面看到新镜像已经包含我们创建的用户 lusifer
设置镜像标签
我们可以使用 docker tag
命令,为镜像添加一个新的标签。
docker tag 6cdd9c6b840d lusifer/ubuntu:dev
docker tag 镜像ID
,这里是 6cdd9c6b840d ,用户名称、镜像源名(repository name)和新的标签名(tag)。
使用 docker images
命令可以看到,ID为 6cdd9c6b840d 的镜像多一个标签。
root@UbuntuBase:/usr/local/docker/ubuntu# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lusifer/ubuntu dev 6cdd9c6b840d 15 minutes ago 122MB
lusifer/ubuntu latest 6cdd9c6b840d 15 minutes ago 122MB
lusifer/ubuntu v2 2642b4944b28 About an hour ago 137MB
ubuntu latest 747cb2d60bbe 3 weeks ago 122MB
ubuntu 14.04 dea1945146b9 7 weeks ago 188MB
ubuntu 15.10 9b9cb95443b5 15 months ago 137MB
training/webapp latest 6fae60ef3446 2 years ago 349MB