记录下Docker的基本操作

docker也学习了一段时间了,把常用的一些操作贴出方便以后查询。
从docker官网获取基本镜像,如CentOS、Nginx、MySQL等。官方所有提供的镜像都可以pull到本地(当然也可以自己制作镜像和仓库了)

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
$ docker pull centos:6
Pulling repository centos
a30bc9f3097e: Download complete
511136ea3c5a: Download complete
5b12ef8fd570: Download complete
$ ulling metadata
$
$
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 6 a30bc9f3097e 3 weeks ago 202.6 MB
$ docker pull mysql:5.5
Pulling repository mysql
667bb345d412: Download complete
667bb345d412: Pulling image (5.5) from mysql
30d39e59ffe2: Download complete
c90d655b99b2: Download complete
b5e97c78b45c: Download complete
cb0fa0867097: Download complete
b36b6ddfcf01: Download complete
8014d760fc97: Download complete
299311e22152: Download complete
59b6bd91022f: Download complete
08934feb6acc: Download complete
ea9a30b9d271: Download complete
d9ce8453583f: Download complete
ebc778162aba: Download complete
fe4aea8454e3: Download complete
2a14c4d2bda4: Download complete
4474366d0a80: Download complete
$ ulling metadata
$
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 6 a30bc9f3097e 3 weeks ago 202.6 MB
mysql 5.5 667bb345d412 3 weeks ago 214.5 MB

删除镜像。docker rmi 如果要删除容器则是docker rm

1
2
3
4
#定位一个镜像和容器的方法有很多,一般可以用其ID号定位(用ID定位时所有ID相同的镜像都会被删除)
$ docker rmi 2485b0f89951
#删除多个镜像
$ docker rmi 61e8f94e1d65 d2d79aebd368 561ed4952ef0 3535cfc9f3ea 4b5657a3d162

创建容器,docker run。该命令还有很多重要的参数需要慢慢积累,比如创建一个用echo打印”hello world”任务的容器

1
2
3
4
5
6
7
$ docker run a30bc9f3097e /bin/echo "hello world"
hello world
$
#当然了定位一个镜像的方法有很多种,可以用镜像名和镜像的标签定位
$ docker run centos:6 /bin/echo "hello world"
hello world
$

每次使用docker run命令都会创建一个新的容器,即使使用的镜像和任务都相同。

1
2
3
4
5
6
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5640a8ef8e8b centos:6 /bin/echo 'hello wor 44 seconds ago Exited (0) 43 seconds ago MyName
8290df21ea68 centos:6 /bin/echo 'hello wor 30 minutes ago Exited (0) 9 minutes ago angry_ardinghelli
488140e90700 centos:6 /bin/echo 'hello wor 32 minutes ago Exited (0) 32 minutes ago sleepy_shockley
$

如果要为新建容器使用–name参数

1
2
3
$ docker run --name "MyName" a30bc9f3097e /bin/echo "hello world"
hello world
$

如果需要在容器停止后立即删除容器使用 –rm 参数,如果需要容器与用户交互使用 -i -t 参数,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。退出该交互模式后容器终止。

1
2
$ docker run -it --rm a30bc9f3097e /bin/bash
bash-4.1#

如果需要容器已守护态运行使用 -d 参数,进入正在运行的容器使用 docker attach 命令,退出时使用 Ctrl+P+Q键,不然该容器会停止。使用ssh进入容器就不存在这个问题了。

1
2
3
4
5
6
7
8
9
10
11
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1fe3e063eaa centos:6 /bin/bash About a minute ago Up About a minute berserk_bohr
$ docker attach d1fe3e063eaa

bash-4.1#
bash-4.1# $
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1fe3e063eaa centos:6 /bin/bash 5 minutes ago Up 5 minutes berserk_bohr
$

容器创建或停止后可以用 docker ps 查看当前运行的容器,使用dicker ps -a 查看所有容器

1
2
3
4
5
6
7
8
9
10
$ docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f440014aebbc 0beee7f478c8 /entrypoint.sh mysql 12 minutes ago Up 12 minutes 3306/tcp mysql
$
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8290df21ea68 centos:6 /bin/echo 'hello wor 11 minutes ago Exited (0) 4 minutes ago angry_ardinghelli
f440014aebbc 0beee7f478c8 /entrypoint.sh mysql 12 minutes ago Up 12 minutes 3306/tcp mysql
488140e90700 centos:6 /bin/echo 'hello wor 13 minutes ago Exited (0) 13 minutes ago sleepy_shockley
$

容器的停止、启动或重启用 docker stop、docker start、docker restart。容器的删除用 docker rm,删除一个正在运行的容器需要加上 -f 参数。

1
2
3
4
5
6
7
8
9
$ docker stop mysql
mysql
$ docker rm mysql
mysql
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8290df21ea68 centos:6 /bin/echo 'hello wor 12 minutes ago Exited (0) 5 minutes ago angry_ardinghelli
488140e90700 centos:6 /bin/echo 'hello wor 13 minutes ago Exited (0) 13 minutes ago sleepy_shockley
$

查看容器的输出信息用 docker logs,比如容器angry_ardinghelli任务就是输出一个“hello world”后终止,要查看容器的输出信息需要使用 docker logs命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ docker logs angry_ardinghelli
hello world
hello world
hello world
$ docker start angry_ardinghelli
angry_ardinghelli
$ docker start angry_ardinghelli
angry_ardinghelli
$ docker logs angry_ardinghelli
hello world
hello world
hello world
hello world
hello world
$

推荐一个不错的入门学习资料 http://dockerpool.com/static/books/docker_practice/index.html

----------------本文结束 感谢阅读----------------