[原创] Ubuntu 下 Docker 安装及使用简明教程 - 制作 Spring Boot 应用镜像

本文是简明教程,面向和我一样刚学习 Docker 的人。请各位高手及专家自觉绕行。
安装前,先说明下我的系统环境:
OS: Ubuntu 16.04 LTS Desktop amd64
我已经打包好了一个 Spring Boot 工程(jar 形式)。由于 Spring Boot 中已经集成了 Tomcat,因此,在制作 Docker 时,只需要 Java 环境即可。
安装 Docker
官方安装说明:https://docs.docker.com/engine/installation/linux/ubuntulinux/
安装要求:
Docker 要求系统必须是 64 位系统,并不要求 Ubuntu 的版本,内核版本要求至少是 3.10。
检查内核版本:

1
2
$ uname -r
4.4.0-24-generic

更新 APT 镜像源:

1
2
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates

添加 GPG Key:

1
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

打开如下文件(若不存在的话则创建一个)/etc/apt/sources.list.d/docker.list,删除文件中所有的内容,并根据系统的版本添加如下内容:

1
$ sudo vim /etc/apt/sources.list.d/docker.list

Ubuntu Precise 12.04 (LTS)

1
deb https://apt.dockerproject.org/repo ubuntu-precise main

Ubuntu Trusty 14.04 (LTS)

1
deb https://apt.dockerproject.org/repo ubuntu-trusty main

Ubuntu Wily 15.10

1
deb https://apt.dockerproject.org/repo ubuntu-wily main

Ubuntu Xenial 16.04 (LTS)

1
deb https://apt.dockerproject.org/repo ubuntu-xenial main

更新 APT 镜像源:

1
$ sudo apt-get update

清理旧的 repo (如果存在的话):

1
$ sudo apt-get purge lxc-docker

验证 APT 是否更新成功:

1
2
3
4
5
6
7
8
9
10
11
$ apt-cache policy docker-engine
docker-engine:
已安装:(无)
候选: 1.11.2-0~xenial
版本列表:
1.11.2-0~xenial 500
500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages
1.11.1-0~xenial 500
500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages
1.11.0-0~xenial 500
500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages

Ubutnu 14.04 以上的用户,建议继续完成如下步骤:
安装 linux-image-extra 包:

1
$ sudo apt-get install linux-image-extra-$(uname -r)

Ubutnu 14.04 及以下的用户,还需要安装 apparmor:

1
$ sudo apt-get install apparmor

安装 Docker

1
$ sudo apt-get install docker-engine

启动 docker daemon:

1
$ sudo service docker start

验证 docker 是否安装成功:

1
$ sudo docker run hello-world

至此, docker 的安装已经结束。
通过情况下,运行 docker 需要管理员权限,如果你不想每次执行 docker 命令时都加上 sudo 的话,可以执行如下步骤:
创建 docker group:

1
$ sudo groupadd docker

将需要执行 docker 命令的用户(例如:yhz61010)添加到 docker 组中:

1
$ sudo usermod -aG docker yhz61010

注销当前用户,并重新登录。
验证:

1
$ docker run hello-world

如果运行失败的话,会有如下提示:

1
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?

设置 docker daemon 随机启动:

1
$ sudo systemctl enable docker

------------------------------------------------------
下载镜像
示例:从官方仓库中下载最新版 Ubuntu 镜像:

1
2
3
4
5
6
7
8
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
5ba4f30e5bea: Downloading [======> ] 6.389 MB/48.65 MB
9d7d19c9dc56: Download complete
ac6ad7efd0f9: Download complete
e7491a747824: Download complete
a3ed95caeb02: Download complete

查看已下载的镜像:

1
2
3
4
$ docker images 
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 693bce725149 2 weeks ago 967 B
ubuntu latest 2fa927b5cdd3 3 weeks ago 122 MB

安装 Java 环境
在容器中挂载主机上下载好的 JDK 作为数据卷。
假设:
主机上下载好的 JDK 路径如下:/media/[Your login user]/Linux/Java/
挂载到容器中的如下目录:/home/Download/

1
$ docker run -i -t -v /media/[Your login user]/Linux/Java/:/home/Download ubuntu /bin/bash

说明:
-i 交互模式
-t 控制台模式
-v 指定数据卷
ubuntu 镜像名
/bin/bash 需要执行的命令
进行容器后,会看到类似如下的内容:

1
root@569c12b64f64:/#

注意:请记下 “569c12b64f64” 这个数字,后面制作镜像时会用到。
之后在容器中安装 Java 并配置环境(方法请自行 Google 或 百度)。
然后将打包好的 Spring Boot 工程,放到容器中。
之后执行如下命令退出容器:

1
# exit

制作镜像
运行如下命令制作镜像:

1
$ docker commit -m "Add Oracle Java7 and Spring Boot project" -a "Author Name" 569c12b64f64 ubuntu/java7:v1

说明:
-m 后面是本次提交的说明。
-a 后面是本次提交的作者。
569c12b64f64 即之前记下的窗口ID。
ubuntu/java7:v1 是镜像的名称及版本
查看新制作的镜像:

1
2
3
4
5
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu/java7 v1 686982dab31f 7 seconds ago 772.8 MB
hello-world latest 693bce725149 2 weeks ago 967 B
ubuntu latest 2fa927b5cdd3 3 weeks ago 122 MB

启动 Spring Boot

1
$ docker run -d -p 57070:7070 --name springboot ubuntu/java7:v1 java -jar /springboot-0.0.1-SNAPSHOT.jar

说明:
-d 在后台执行
-p 57070:7070 将容器中的 7070 端口映像到主机上的 57070 端口(我已经将 Spring Boot 中的 Tomcat 端口改成了 7070)。
–name 后面指定的是启动容器后容器的名称。
ubuntu/java7:v1 是镜像的名称。
java -jar /springboot-0.0.1-SNAPSHOT.jar 是需要执行的命令。
查看容器 IP
在主机或容器中运行 ifconfig 命令,查看容器的 IP 地址。
下面的示例是在主机中运行 ifconfig 命令查看容器的 IP 地址:

1
2
3
4
5
6
7
8
9
10
11
12
$ ifconfig 
docker0 Link encap:以太网 硬件地址 02:42:49:a6:b0:8d
inet 地址:172.17.0.1 广播:0.0.0.0 掩码:255.255.0.0
inet6 地址: fe80::42:49ff:fea6:b08d/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 跃点数:1
接收数据包:11263 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:16826 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:648407 (648.4 KB) 发送字节:24761295 (24.7 MB)
......
......
......

查到了容器的 IP 地址,在主机中就可以访问容器中的 Spring Boot 工程了。

其它说明:
删除所有容器:

1
$ docker rm $(docker ps -a -q)

删除指定容器:

1
2
# 首先查看所要删除的容器 ID
$ docker ps -a

1
2
# 然后执行如下命令:
$ docker rm [容器 ID]

删除镜像:
说明:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。

1
2
# 首先查看所要删除的镜像信息
$ docker images

1
2
# 然后执行如下命令删除指定的镜像
$ docker rmi [镜像完整名或镜像 ID]
1
2
3
4
# 例如:
$ docker rmi 693bce725149
# 或
$ docker rmi ubuntu/java7:v1
坚持原创及高品质技术分享,您的支持将鼓励我继续创作!