Docker镜像和容器

理解镜像和容器

Docker引擎提供实现镜像和容器的核心技术。镜像是在运行时使用的文件系统和参数集,它没有状态并且永远不会改变。容器是镜像的运行实例。当运行命令时,Docker引擎:

  • 检查是否有镜像文件
  • 从Docker Hub下载映像
  • 将镜像加载到容器中并“运行”它

Docker Hub:https://hub.docker.com/

运行 whalesay镜像

Docker Hub 主页:https://hub.docker.com/r/docker/whalesay/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$ sudo docker run docker/whalesay cowsay boo
Unable to find image 'docker/whalesay:latest' locally
latest: Pulling from docker/whalesay
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
00bf65475aba: Pull complete
c57b6bcc83e3: Pull complete
8978f6879e2f: Pull complete
8eed3712d2cf: Pull complete
Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b
Status: Downloaded newer image for docker/whalesay:latest
_____
< boo >
-----
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
$ docker images //显示所有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 48b5124b2768 2 months ago 1.84 kB
docker/whalesay latest 6b362a9f73eb 22 months ago 247 MB
$ sudo docker run docker/whalesay cowsay Hello, Joe.Ye //修改参数重新运行镜像
_______________
< Hello, Joe.Ye >
---------------
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/

构建镜像

创建一个Dockerfile

A Dockerfile is a recipe which describes the files, environment, and commands that make up an image.

1
2
3
4
5
6
7
8
9
10
$ mkdir mydockerbuild
$ cd mydockerbuild
$ vim Dockerfile
FROM docker/whalesay:latest
MAINTAINER Joe.Ye <yezhou@yezhou.org>

RUN apt-get -y update && apt-get install -y fortunes
RUN git clone https://github.com/ruanyf/fortunes.git
RUN cp fortunes/data/* /usr/share/games/fortunes/
CMD /usr/games/fortune -a | cowsay

早在1979年,就有人写了一个叫做 fortune 的小程序。在命令行下输入fortune,就会跳出一句。

fortune中文格言库:https://github.com/ruanyf/fortunes

1
2
$ git clone https://github.com/ruanyf/fortunes.git
$ sudo cp fortunes/data/* /usr/share/games/fortunes/

从Dockerfile编译镜像

1
$ sudo docker build -t docker-whale .
  • -t 为镜像指定tag
  • . 表示当前目录
1
2
3
4
5
6
7
8
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-whale latest 8fff85eaeacf 4 minutes ago 256 MB
<none> <none> d3ab35128e41 9 minutes ago 247 MB
hello-world latest 48b5124b2768 2 months ago 1.84 kB
docker/whalesay latest 6b362a9f73eb 22 months ago 247 MB

$ docker run docker-whale //运行

创建 Docker Hub 账号和仓库并发布镜像

注册:https://hub.docker.com/register/

Tag and push the image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo docker images  //找到 docker-whale镜像的Tag
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-whale latest 8fff85eaeacf 33 minutes ago 256 MB
<none> <none> d3ab35128e41 38 minutes ago 247 MB
hello-world latest 48b5124b2768 2 months ago 1.84 kB
docker/whalesay latest 6b362a9f73eb 22 months ago 247 MB
$ sudo docker tag 8fff85eaeacf yezhou/docker-whale:latest //Tag the docker-whale image
$ sudo docker images //确认 docker-whale镜像已被Tagged
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-whale latest 8fff85eaeacf 37 minutes ago 256 MB
yezhou/docker-whale latest 8fff85eaeacf 37 minutes ago 256 MB
<none> <none> d3ab35128e41 41 minutes ago 247 MB
hello-world latest 48b5124b2768 2 months ago 1.84 kB
docker/whalesay latest 6b362a9f73eb 22 months ago 247 MB

登录并发布镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ sudo docker login
Username: yezhou
Password:
Login Succeeded
$ sudo docker push yezhou/docker-whale
time="2017-03-21T20:22:50+08:00" level=info msg="Unable to use system certificate pool: crypto/x509: system root pool is not available on Windows"
The push refers to a repository [docker.io/yezhou/docker-whale]
c04df8c4e2c7: Pushed
0f52c7601381: Layer already exists
7e86c6a40f66: Pushed
5f70bf18a086: Layer already exists
d061ee1340ec: Layer already exists
d511ed9e12e1: Layer already exists
091abc5148e4: Layer already exists
b26122d57afa: Layer already exists
37ee47034d9b: Layer already exists
528c8710fd95: Layer already exists
1154ba695078: Pushed
latest: digest: sha256:090cbc4196976c9a575ccc78150f0460593c709c3e3fa5cbc32e12fa088f4ab9 size: 3036

拉取新发布的镜像

1
2
docker rmi id  //根据id删除镜像
docker rm //删除容器

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :