欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-15 13:56:19
...
本文是简明教程,面向和我一样刚学习 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。

检查内核版本:
$ uname -r
4.4.0-24-generic
更新 APT 镜像源:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
添加 GPG Key:
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
打开如下文件(若不存在的话则创建一个)/etc/apt/sources.list.d/docker.list,删除文件中所有的内容,并根据系统的版本添加如下内容:
$ sudo vim /etc/apt/sources.list.d/docker.list
Ubuntu Precise 12.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-precise main
Ubuntu Trusty 14.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-trusty main
Ubuntu Wily 15.10
deb https://apt.dockerproject.org/repo ubuntu-wily main
Ubuntu Xenial 16.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-xenial main
更新 APT 镜像源:
$ sudo apt-get update
清理旧的 repo (如果存在的话):
$ sudo apt-get purge lxc-docker
验证 APT 是否更新成功:
$ 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 包:
$ sudo apt-get install linux-image-extra-$(uname -r)
Ubutnu 14.04 及以下的用户,还需要安装 apparmor:
$ sudo apt-get install apparmor
安装 Docker
$ sudo apt-get install docker-engine
启动 docker daemon:
$ sudo service docker start
验证 docker 是否安装成功:
$ sudo docker run hello-world
至此, docker 的安装已经结束。

通过情况下,运行 docker 需要管理员权限,如果你不想每次执行 docker 命令时都加上 sudo 的话,可以执行如下步骤:

创建 docker group:
$ sudo groupadd docker
将需要执行 docker 命令的用户(例如:yhz61010)添加到 docker 组中:
$ sudo usermod -aG docker yhz61010
注销当前用户,并重新登录。

验证:
$ docker run hello-world
如果运行失败的话,会有如下提示:
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
设置 docker daemon 随机启动:
$ sudo systemctl enable docker
------------------------------------------------------

下载镜像

示例:从官方仓库中下载最新版 Ubuntu 镜像:
$ 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 
查看已下载的镜像:
$ 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/
$ docker run -i -t -v /media/[Your login user]/Linux/Java/:/home/Download ubuntu /bin/bash
说明:
-i 交互模式
-t 控制台模式
-v 指定数据卷
ubuntu 镜像名
/bin/bash 需要执行的命令

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

运行如下命令制作镜像:
$ docker commit -m "Add Oracle Java7 and Spring Boot project" -a "Author Name" 569c12b64f64 ubuntu/java7:v1
说明:
-m 后面是本次提交的说明。
-a 后面是本次提交的作者。
569c12b64f64 即之前记下的窗口ID。
ubuntu/java7:v1 是镜像的名称及版本

查看新制作的镜像:
$ 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
$ 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 地址:
$ 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 工程了。

==========================================================================================

其它说明:

删除所有容器:
$ docker rm $(docker ps -a -q)
删除指定容器:
# 首先查看所要删除的容器 ID
$ docker ps -a
# 然后执行如下命令:
$ docker rm [容器 ID]
删除镜像:
说明:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。
# 首先查看所要删除的镜像信息
$ docker images
# 然后执行如下命令删除指定的镜像
$ docker rmi [镜像完整名或镜像 ID]
# 例如:
$ docker rmi 693bce725149
# 或
$ docker rmi ubuntu/java7:v1