1、安装

$ sudo apt install docker.io

配置镜像加速器

官方的Docker Hub服务器在国外,有时候比较慢,这里推荐用阿里的镜像服务,按照指导填入/etc/docker/daemon.json就可以了。

2、简单试玩

1、创建一个Ubuntu 18.04的镜像:

$ docker pull ubuntu:18.04

2、运行容器:

$ docker run -itd ubuntu:18.04
-i, --interactive	Keep STDIN open even if not attached
-t, --tty			Allocate a pseudo-TTY
-d, --detach		Run container in background and print container ID(如果没有这个参数,就在前台运行,调试时)

--restart 重启策略,可选取值有:no, always, on-failure:3 
--name 指定容器的名字,默认会随机分配一个名字

3、进入容器:

$ docker exec -it a3ef333a0a05 /bin/bash

现在,就进入到一个全新的虚拟Ubuntu系统了!(通过docker ps命令可以获取正在运行容器的ID)

root@a3ef333a0a05:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@a3ef333a0a05:/# echo $SHELL
/bin/bash

可以看到默认用户是root,默认进入根目录,默认shell是/bin/bash。

3、镜像管理

列出镜像

# docker image ls [OPTIONS] [REPOSITORY[:TAG]]

通常用快捷命令docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu-python2.7    18.04               761e4569313a        2 hours ago         167 MB
ubuntu              16.04               4a689991aa24        2 days ago          116 MB
ubuntu              14.04               f216cfb59484        2 days ago          188 MB
ubuntu              18.04               ea4c82dcd15a        2 days ago          85.8 MB

构建

# docker image build [OPTIONS] PATH | URL | -

通常用快捷命令docker build

例如:

$ docker build -t myimage /home/gld/myproject

-t: Name and optionally a tag in the ‘name:tag’ format (default [])
PATH表示Dockerfile所在的文件夹路径,可以用.代表当前目录。

删除

# docker image rm [OPTIONS] IMAGE [IMAGE...]

通常用快捷命令:docker rmi

例如:

$ docker rmi ubuntu:18.04
$ docker rmi `docker images -q` # 删除所有镜像

清理

# docker image prune [OPTIONS]

-a: Remove all unused images, not just dangling ones

例如如下语句会删掉所有没有容器实例的镜像:

# docker image prune -a

保存和加载

第一种方式:

# docker save -o myimage.tar myimage
# docker load -i myimage.tar

第二种方式:

# docker export -o mysql5.7.19.tar container_id
# docker import mysql5.7.19.tar mysql5.7.19:1.0

运行

docker run -e PYTHONIOENCODING=utf-8  -itd ubuntu:18.04 /bin/bash

-e:设定环境变量

4、容器管理

显示容器

# docker container ls -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
c9805b221f99        ubuntu:18.04        "/bin/bash"         3 minutes ago       Exited (0) About a minute ago                       trusting_noyce
5a69b70b4773        ubuntu              "/bin/bash"         8 minutes ago       Exited (0) 8 minutes ago                            dreamy_turing
c5928d98a9d3        ubuntu              "/bin/bash"         9 minutes ago       Exited (0) 9 minutes ago                            modest_nightingale
21ffef17a597        ubuntu              "/bin/bash"         9 minutes ago       Exited (0) 9 minutes ago                            xenodochial_morse

-a, 显示所有容器(默认显示正在运行的容器)

创建容器

进入容器

删除容器

删除所有容器:

# docker rm $(docker ps -aq)

-q:

5、镜像与容器的交互

修改当前容器,然后保存为镜像。首先通过docker exec命令进入容器,容器内通过apt install python安装Python,退出容器后通过docker commit来保存为镜像:

$ docker commit dd977517902b ubuntu-python2.7:18.04

-a: Author (e.g., “John Hannibal Smith hannibal@a-team.com”)
-m: Commit message

之后就可以在镜像列表里看到刚刚保存的镜像:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu-python2.7    18.04               761e4569313a        8 seconds ago       167 MB
ubuntu              18.04               ea4c82dcd15a        2 days ago          85.8 MB

6、Volume

查看容器信息(挂载信息):
$ docker inspect container_id

简单挂载命令:
$ docker run -itd -v /src/logs ubuntu:18.04
此命令仅指定容器目录,Docker会自动分配宿主机一个目录给它。用inspect命令可以看到宿主机目录为:“Source”: “/var/lib/docker/volumes/636a4b3275f7f5e845c49779067f1b1ca99b5fd274624d530130000eb08338c3/_data”

一般挂载命令:
$ docker run -itd -v /home/gld/logs:/src/logs ubuntu:18.04
该命令指定了宿主机目录和容器目录。默认情况下容器可以对挂载目录进行读写,如果需要只读模式(Read Only),则 /home/gld/logs:/src/logs:ro。

7、网络(Network)

$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
37e1baffdd39   bridge    bridge    local
1c4a204bb0de   host      host      local
c44d9f84c7c8   none      null      local

默认有三个网络。

创建一个名为 hadoop 的虚拟桥接网络,该虚拟网络内部提供了自动的DNS解析服务:

$ docker network create --driver=bridge hadoop

8、Dockerfile

Dockerfile创建自定义镜像

CMD
一般这里的命令都是前台程序,如/bin/bash等,如果是后台程序,则容器启动后会立刻停止。

9、实用工具

9.1 Portainer

使用Docker最痛苦的就是经常需要删除容器了,Portainer是Docker的Web UI管理界面,可以方便地进行镜像和容器的增删查改。

$ sudo docker pull docker.io/portainer/portainer
$ sudo docker run -d -p 9000:9000 \
	--restart=always \
	-v /var/run/docker.sock:/var/run/docker.sock \
	--name prtainer \
	docker.io/portainer/portainer

之后就可以通过浏览器访问http://localhost:9000来访问了。
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐