docker简单使用(一)

docker简单使用(一)

镜像操作

获取镜像

docker获取镜像很简单,docker pull image:tag即可,不加tag默认获取最新latest
例如,获取Ubuntu和nginx:

1
2
3
4
5
docker pull ubuntu	#获取latest

docker pull ubuntu:16.04 #获取16.04版本ubuntu

docker pull nginx #获取latest版nginx

运行镜像

获取完镜像之后,可以通过dokcer images来查看:

1
2
3
4
5
6
7
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 62c261073ecf 5 days ago 109MB
ubuntu 16.04 2a697363a870 3 weeks ago 119MB
ubuntu latest 7698f282e524 3 weeks ago 69.9MB
hello-world latest fce289e99eb9 5 months ago 1.84kB
ngrinder/controller latest e7f8d86685cd 3 years ago 246MB

镜像的运行,以ubuntu:16.04为例

1
docker run -it ubuntu:16.04 

可以通过docker ps -a来查看当前运行的镜像:

1
2
3
[root@localhost docker]# docker  ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
385364730b09 ubuntu:16.04 "/bin/bash" 18 seconds ago Up 16 seconds nervous_jones

其中-it表示以交互式方式运行镜像,这样,就可以进入交互式终端(ubuntu),来进行一些操作,例如查看当前系统:

1
2
3
4
5
6
7
8
9
10
11
12
root@385364730b09:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

使用exit退出容器

查看当前容器状态:

1
2
3
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
385364730b09 ubuntu:16.04 "/bin/bash" 2 minutes ago Exited (0) 4 seconds ago nervous_jones

可以看见当前STATUS状态从Up xxx变成了Exited,容器以及被关闭,如果该容器只是用来调试错误,在关闭之后可以进行删除操作:docker rm 385364730b09(Container id)

或者在启动镜像时候就直接指定关闭即删除容器:

1
docker run -it --rm ubuntu:16.04

运行webserver

像类似nginx这样的webserver,运行时候,需要指定端口,可以这样:

1
docker run --name web1 -d -p 8088:80 nginx

以nginx镜像启动名为web1的容器,端口从80映射到8088,这样,在浏览器中可以使用http://ip:8088打开nginx欢迎页面。

commit保存新镜像

前面已经启动了nginx的镜像,并且以8088端口运行,现在,修改nginx的欢迎页面来生成一个新的镜像:

1
docker exec -it web1 bash

进入容器之后,修改默认页:

1
2
3
echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

exit

刷新浏览器页面即可,当前欢迎页已被修改
修改了容器的文件,也就是改动了容器的存储层,可以通过docker diff web1来查看具体改动

以上已经完成了修改nginx默认页,现在需要将修改保存成新的镜像,这样后面就可以直接使用

1
2
3
4
5
6
[root@localhost ~]# docker commit \
> --author "kyle" \
> --message "change the default page" \
> web1 \
> nginx:v2
sha256:f531cfc896d61fd557748ddabb1ce2233e57f4e88e6cf49502e4c3e03de77eff

然后使用docker images查看:

1
2
3
4
5
6
7
8
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v2 f531cfc896d6 12 minutes ago 109MB
nginx latest 62c261073ecf 6 days ago 109MB
ubuntu 16.04 2a697363a870 3 weeks ago 119MB
ubuntu latest 7698f282e524 3 weeks ago 69.9MB
hello-world latest fce289e99eb9 5 months ago 1.84kB
ngrinder/controller latest e7f8d86685cd 3 years ago 246MB

通过docker history查看镜像的历史记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# docker history nginx:v2
IMAGE CREATED CREATED BY SIZE COMMENT
f531cfc896d6 15 minutes ago nginx -g daemon off; 106B change the default page
62c261073ecf 6 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 6 days ago /bin/sh -c #(nop) STOPSIGNAL SIGTERM 0B
<missing> 6 days ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 6 days ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx… 22B
<missing> 6 days ago /bin/sh -c set -x && addgroup --system -… 54MB
<missing> 6 days ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~stretch 0B
<missing> 6 days ago /bin/sh -c #(nop) ENV NJS_VERSION=0.3.2 0B
<missing> 6 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.17.0 0B
<missing> 4 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:fcb9328ea4c115670… 55.3MB

备注: docker commit要慎用,该操作,即使是简单的修改一个默认页面,也会同时添加或改动很多文件,如果是安装软件包、编译构建,那会有大量无关内容被添加进来,不小心清理会导致镜像极为臃肿;并且,docker commit除了制作镜像的人,其他没有人知道执行过什么命令,无法保证下一次可以生成一个一模一样的镜像(以上,来自docker practice)

关于docker镜像的制作,最优良的方式是写dockerfile 这个后面再说

文章目录
  1. 镜像操作
    1. 获取镜像
    2. 运行镜像
    3. 运行webserver
    4. commit保存新镜像
|