docker快速入门

1.docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker由以下几个部分组成:

DockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器

2.docker安装

离线安装(以CentOS 7为例)

使用yum命令更新系统内所有可更新的rpm包

[root@192 ~]# yum update        或者        [root@192 ~]# yum upgrade

进入 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

下载
docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm
到本地
(也可在CentOS7中使用wget命令接下载地址进行下载,但有被拦截的风险)

使用相关工具(如Xftp)将下载好的两个rpm包上传到/opt/docker

[root@192 /]# cd /opt
[root@192 opt]# mkdir docker
[root@192 opt]# cd docker
[root@192 docker]# ll
total 19096
-rw-r--r--. 1 root root 19521288 May  4 11:28 docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root    29108 May  4 11:28 docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm

使用yum命令安装rpm包(y表示全部接受,星号通配符表示安装该文件夹下的所有rpm包)

[root@192 docker]#  yum -y install *

安装完成后启动docker服务

[root@192 docker]# systemctl start docker

设置开机自启动docker服务

[root@192 docker]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

为检测是否成功安装docker,直接运行hello-world镜像,docker会从远程服务器下载该镜像并运行

[root@192 docker]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete 
Digest: sha256:f2266cbfc127c960fd30e76b7c792dc23b588c0db76233517e1891a4e357d519
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

至此离线docker安装成功

在线安装(以CentOS 7为例)

直接运行该命令即可

curl -sSL https://get.daocloud.io/docker | sh

3.配置docker镜像加速器

使用加速器可以提升获取Docker官方镜像的速度(以阿里云为例)

[root@192 /]# mkdir -p /etc/docker
[root@192 /]# tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://yd261zez.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://yd261zez.mirror.aliyuncs.com"]
}
[root@192 /]# systemctl daemon-reload
[root@192 /]# systemctl restart docker

"https://yd261zez.mirror.aliyuncs.com" 是你注册镜像服务后获得的地址

4.docker基本管理命令

docker指令语法规则

docker +命令关键字(COMMAND)+参数

docker镜像常用命令

docker info //显示docker系统信息,包括镜像和容器数
docker search //搜索可用的docker镜像
docker pull //拉取并下载镜像到本地
docker images //查看本地镜像信息
docker rmi //删除本地镜像
docker run //启动并运行本地镜像

docker容器管理常用命令

每一个容器被创建后,都会生成一个CONTAINER ID作为容器的唯一标志,后续对容器启动、停止、修改、删除等操作,都是通过CONTAINER ID来完成。类似于数据库中的主键

docker start/stop CONTAINERID //启动或停止容器(CONTAINERID可替换为容器别名)
docker inspect CONTAINERID //查看容器所有信息(CONTAINERID可替换为容器别名)
docker logs CONTAINERID //查看容器日志(CONTAINERID可替换为容器别名)
docker stats CONTAINERID //查看容器所占系统资源(CONTAINERID可替换为容器别名)
docker exec CONTAINERID 容器内命令 //执行容器内的命令(CONTAINERID可替换为容器别名)
docker exec -it CONTAINERID /bin/bash //交互式进入容器(CONTAINERID可替换为容器别名)

docker容器管理其它常用命令

docker ps -a //查看所有的docker容器进程信息
docker rm CONTAINERID //删除容器
docker ps -a -q //只显示容器ID
docker rm -f $(docker ps -a -q) //删除所有容器

5.示例(wordpress博客安装)

下载wordpress镜像

[root@192 /]# docker pull wordpress

下载mariadb镜像

[root@192 /]# docker pull mariadb

查看本地镜像

[root@192 /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wordpress           latest              7fda6c241024        2 days ago          550 MB
mariadb             latest              992bce5ed710        10 days ago         401 MB
hello-world         latest              d1165f221234        8 weeks ago         13.3 kB

启动mariadb

[root@192 /]# docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb
d05b489959507402f24d042934efaf1bc27fce5f3bdb3c35c8f12636143b2f53

启动wordpress

[root@192 /]# docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
5c6b2742715bc36d9bc15a5fa106395d6ed5c0c24bcc430532ae2954ff1be77d

查看docker中启动的进程

[root@192 /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
5c6b2742715b        wordpress           "docker-entrypoint..."   59 seconds ago      Up 58 seconds       0.0.0.0:8080->80/tcp   MyWordPress
d05b48995950        mariadb             "docker-entrypoint..."   2 minutes ago       Up 2 minutes        3306/tcp               db

在虚拟机外访问wordpress

http://192.168.209.128:8080/
192.168.209.128要替换为CentOS7的IP地址
如果无法访问可能需要关闭防火墙 [root@192 /]# systemctl stop firewalld
或开放所需端口 [root@192 /]# firewall-cmd --zone=public --add-port=80/tcp --permanent [root@192 /]# firewall-cmd --reload

6.docker镜像的制作

镜像的特性

容器创建时需要指定镜像,每个镜像都由唯一的标示 Image ID ,和容器的 Container ID 一样,默认 128 位,可以使用前 16 为缩略形式,也可以使用镜像名与版本号两部分组合唯一标示,如果省略版本号,默认使用最新版本标签 ( latest )

docker镜像制作的关键Dockerfile

Dockfile 是一种被 Docker 程序解释的脚本,Dockerfile 由一条一条的指令组成,每条指令对应Linux 下面的一条命令。Docker 程序将这些 Dockerfile 指令翻译真正的 Linux 命令。Dockerfile 有自己书写格式和支持的命令,Docker 程序解决这些命令间的依赖关系,类似于 Makefile。Docker 程序将读取 Dockerfile,根据指令生成定制的 image

Dockerfile基本语法

FROM(指定基础 image):构建指令。必须指定且需要在 Dockerfile 其他指令的前面。后续的指令都依赖于该指令指定的 image。FROM 指令指定的基础 image 可以是官方远程仓库中的,也可以位于本地仓库。

FROM centos:7.2

MAINTAINER(用来指定镜像创建者信息):构建指令。用于将 image 的制作者相关的信息写入到 image 中。当我们对该 image 执行 docker inspect命令时,输出中有相应的字段记录该信息。

MAINTAINER zcx "1364052596@qq.com"

RUN(安装软件用):构建指令。RUN 可以运行任何被基础 image 支持的命令。如基础 image 选择了 CentOS,那么软件管理部分只能使用 CentOS 的管理命令。

RUN cd /tmp && curl -L
'http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz' | tar -xz
RUN ["/bin/bash", "-c", "echo hello"]

CMD(设置 container 启动时执行的操作):设置指令。用于 container 启动时指定的操作。该操作可以是执行自定义脚本,也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条。

CMD echo “Hello, World!” 

ENTRYPOINT(设置 container启动时执行的操作):设置指令。指定容器启动时执行的命令,可以多次设置,但是只有最后一个有效。

ENTRYPOINT ls -l

该指令的使用分为两种情况,一种是独自使用,另一种和CMD指令配合使用。当独自使用时,如果你还使用了 CMD 命令且 CMD 是一个完整的可执行的命令,那么 CMD 指令和 ENTRYPOINT 会互相覆盖只有最后一个 CMD 或者 ENTRYPOINT 有效。CMD 指令将不会被执行,只有 ENTRYPOINT 指令被执行。

CMD echo “Hello, World!” 
ENTRYPOINT ls -l

另一种用法是和 CMD 指令配合使用来指定ENTRYPOINT的默认参数,这时CMD指令不是一个完整的可执行命令,仅仅是参数部分;ENTRYPOINT 指令只能使用 JSON 方式指定执行命令,而不能指定参数。

FROM ubuntu
CMD ["-l"]
ENTRYPOINT ["/usr/bin/ls"]

USER(设置 container 容器的用户):设置指令。设置启动容器的用户,默认是 root 用户。

USER daemon = ENTRYPOINT ["memcached", "-u", "daemon"]

EXPOSE(指定容器需要映射到宿主机器的端口):设置指令。该指令会将容器中的端口映射成宿主机器中的某个端口。当你需要访问容器的时候,可以不是用容器的 IP 地址而是使用宿主机器的 IP地址和映射后的端口。要完成整个操作需要两个步骤:首先在 Dockerfile 使用 EXPOSE 设置需要映射的容器端口,然后在运行容器的时候指定-p 选项加上 EXPOSE 设置的端口,这样 EXPOSE 设置的端口号会被随机映射成宿主机器中的一个端口号。也可以指定需要映射到宿主机器的那个端口,这时要确保宿主机器上的端口号没有被使用。EXPOSE 指令可以一次设置多个端口号,相应的运行容器的时候,可以配套的多次使用-p 选项。

映射一个端口
EXPOSE 22
相应的运行容器使用的命令
docker run -p port1 image
映射多个端口
EXPOSE port1 port2 port3
相应的运行容器使用的命令
docker run -p port1 -p port2 -p port3 image
还可以指定需要映射到宿主机器上的某个端口号
docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image

ENV(用于设置环境变量):构建指令。在 image 中设置一个环境变量example:设置了后,后续的 RUN 命令都可以使用,container 启动后,可以通过 docker inspect 查看这个环境变量,也可以通过在 docker run --env key=value 时设置或修改环境变量。假如你安装了 JAVA 程序,需要设置 JAVA_HOME,那么可以在 Dockerfile 中这样写:

ENV JAVA_HOME /path/to/java/direct

ADD(从 src 复制文件到 container 的 dest 路径)。

ADD <src> <dest>
<src> 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件 url
<dest> 是 container 中的绝对路径

COPY (从 src 复制文件到 container 的 dest 路径)。

COPY <src> <dest>

VOLUME(指定挂载点):设置指令。使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器使用。我们知道容器使用的是 AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据的需求时可以在 Dockerfile 中使用该指令。

FROM base
VOLUME ["/tmp/data"]

WORKDIR(切换目录):设置指令。可以多次切换(相当于 cd 命令),对 RUN,CMD,ENTRYPOINT生效。

WORKDIR /p1 WORKDIR p2 RUN vim a.txt

ONBUILD(在子镜像中执行):ONBUILD指定的命令在构建镜像时并不执行,而是在它的子镜像中执行。

ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src

7.示例(打包一个完整的带java环境和Tomcat的CentOS镜像)

准备好Tomcat和JDK的压缩包

[root@192 opt]# mkdir tomcat
[root@192 opt]# cd tomcat
[root@192 tomcat]# ll
total 149788
-rw-r--r--. 1 root root   9656576 May  4 23:37 apache-tomcat-7.0.109.tar.gz
-rw-r--r--. 1 root root 143722924 May  4 23:38 jdk-8u281-linux-x64.tar.gz

编写Dockerfile

FROM hub.c.163.com/public/centos:6.7
MAINTAINER zcx
ADD ./apache-tomcat-7.0.109.tar.gz /root
ADD ./jdk-8u281-linux-x64.tar.gz /root
ENV JAVA_HOME /root/jdk1.8.0_281
ENV PATH $PATH:$JAVA_HOME/bin
EXPOSE 8080
ENTRYPOINT /root/apache-tomcat-7.0.109/bin/startup.sh && touch /root/apache-tomcat-7.0.109/logs/catalina.out && tailf /root/apache-tomcat-7.0.109/logs/catalina.out

构建镜像

[root@192 tomcat]# docker build -t tomcat:V1.0 .
Sending build context to Docker daemon 153.4 MB
Step 1/8 : FROM hub.c.163.com/public/centos:6.7
6.7: Pulling from public/centos
a3ed95caeb02: Pull complete 
a2086e9272f4: Pull complete 
fe7556d2a571: Pull complete 
e4503b9682fe: Pull complete 
970241ec8701: Pull complete 
c057cfc98b71: Pull complete 
d104dceb2fbf: Pull complete 
91c5984f9881: Pull complete 
9e2158881254: Pull complete 
Digest: sha256:318d49272d1ef825831051c558ccb24237f0e95ea0f30dde2c1e6cab11d62ecb
Status: Downloaded newer image for hub.c.163.com/public/centos:6.7
 ---> 63751eaadece
Step 2/8 : MAINTAINER zcx
 ---> Running in 272790fa528f
 ---> 67b8b0b58fe1
Removing intermediate container 272790fa528f
Step 3/8 : ADD ./apache-tomcat-7.0.109.tar.gz /root
 ---> f41432566da0
Removing intermediate container d7feedd11879
Step 4/8 : ADD ./jdk-8u281-linux-x64.tar.gz /root
 ---> f776100c990f
Removing intermediate container 19e04e34b08e
Step 5/8 : ENV JAVA_HOME /root/jdk1.8.0_281
 ---> Running in f0cbf9ba113a
 ---> 11ebfa6b621b
Removing intermediate container f0cbf9ba113a
Step 6/8 : ENV PATH $PATH:$JAVA_HOME/bin
 ---> Running in e5ac40fc107d
 ---> cbd754252d46
Removing intermediate container e5ac40fc107d
Step 7/8 : EXPOSE 8080
 ---> Running in b4d08dccd850
 ---> 2ea47659ce2d
Removing intermediate container b4d08dccd850
Step 8/8 : ENTRYPOINT /root/apache-tomcat-7.0.109/bin/startup.sh && touch /root/apache-tomcat-7.0.109/logs/catalina.out && tailf /root/apache-tomcat-7.0.109/logs/catalina.out
 ---> Running in b1a5b0922959
 ---> c2822430bf15
Removing intermediate container b1a5b0922959
Successfully built c2822430bf15

查看镜像

[root@192 /]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
tomcat                        V1.0                ebe58d4497cd        3 minutes ago       764 MB
wordpress                     latest              7fda6c241024        3 days ago          550 MB
mariadb                       latest              992bce5ed710        10 days ago         401 MB
hello-world                   latest              d1165f221234        8 weeks ago         13.3 kB
hub.c.163.com/public/centos   6.7                 63751eaadece        5 years ago         393 MB

创建容器,运行镜像

[root@192 /]# docker run --name tomcat_test -d -p 8080:8080 tomcat:V1.0
1706f9dcdfa80e5ea06a55eaea3bf95518880a9f9fe81f6509b823715ebceb59

在虚拟机外访问http://192.168.209.128:8080/即可访问Tomcat欢迎页面(192.168.209.128为CentOS7的IP地址)

8.数据卷

数据卷基础

Docker联合文件系统

docker镜像是有多层只读文件叠加而成,当运行起一个容器的时候,Docker会在只读层上创建一个读写层。如果运行中的容器需要修改文件,那么并不会修改只读层的文件,只会把该文件复制到读写层然后进行修改,只读层的文件就被隐藏了。当删除了该容器之后,或者重启容器之后,之前对文件的更改会丢失,镜像的只读层以及容器运行的是“读写层”被称为联合文件系统(Union File System)。
为了实现容器与主机之间、容器与容器之间共享文件,容器中数据的持久化,将容器中的数据备份、迁移、恢复等,Docker加入了数据卷(volumes)机制。简单的讲,就是做了一个文件夹的实时共享,有点像局域网的文件共享。

数据卷的特点

1.数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
2.数据卷可以是目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。
3.容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
4.容器对数据卷的修改是实时进行的。
5.数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会相互影响。

数据卷的实现

容器管理卷

在with_volume文件夹下创建Dockerfile并写入

FROM hub.c.163.com/public/centos:6.7
RUN mkdir /data
VOLUME /data

构建该镜像

[root@localhost with_volume]# docker build -t centos_with_volume:V1.0 .
Sending build context to Docker daemon 2.048 kB
Step 1/3 : FROM hub.c.163.com/public/centos:6.7
 ---> 63751eaadece
Step 2/3 : RUN mkdir /data
 ---> Running in 26800645abc3
 ---> 90b9fa9bf53e
Removing intermediate container 26800645abc3
Step 3/3 : VOLUME /data
 ---> Running in 9a46689ce23b
 ---> 05c50b6a5bf6
Removing intermediate container 9a46689ce23b
Successfully built 05c50b6a5bf6

创建容器运行该镜像

[root@localhost with_volume]# docker run --name centos_with_volume -d centos_with_volume:V1.0
2dcf9e4aa4f7bb0a50a1370fffaddb13b75fe47c459c580cf5ef85d3ec6dea66

此时进入docker的volumes文件夹

[root@localhost with_volume]# cd /var/lib/docker/volumes/

查看该文件夹下文件,找到刚才创建的容器对应的文件夹进入

[root@localhost volumes]# ll
total 32
drwxr-xr-x. 3 root root    19 May  6 21:35 7fdfcfa6de683923159533126118a811291781fa0f8def12b4f861a65585fc2c
-rw-------. 1 root root 65536 May  6 21:35 metadata.db
[root@localhost volumes]# cd 7fdfcfa6de683923159533126118a811291781fa0f8def12b4f861a65585fc2c/

进入该文件夹下的_data文件夹

[root@localhost 7fdfcfa6de683923159533126118a811291781fa0f8def12b4f861a65585fc2c]# ll
total 0
drwxr-xr-x. 2 root root 6 May  6 21:35 _data
[root@localhost 7fdfcfa6de683923159533126118a811291781fa0f8def12b4f861a65585fc2c]# cd _data/

此时该文件夹下无任何内容

[root@localhost _data]# ll
total 0

这时以交互方式进入刚才创建的容器

[root@localhost ~]# docker exec -it centos_with_volume /bin/bash
[root@2dcf9e4aa4f7 /]# 

进入该容器中由Dockerfile创建的data文件夹,在该文件夹下新建一个文件

[root@2dcf9e4aa4f7 /]# cd /data
[root@2dcf9e4aa4f7 data]# touch zcx666
[root@2dcf9e4aa4f7 data]# ll
total 0
-rw-r--r--. 1 root root 0 May  6 13:47 zcx666

这时回到刚才宿主机的_data文件夹再查看

[root@localhost _data]# ll
total 0
-rw-r--r--. 1 root root 0 May  6 21:47 zcx666

可以发现在容器里创建的文件也出现在了宿主机里

在宿主机_data文件夹下再创建一个文件

[root@localhost _data]# touch 666zcx
[root@localhost _data]# ll
total 0
-rw-r--r--. 1 root root 0 May  6 21:51 666zcx
-rw-r--r--. 1 root root 0 May  6 21:47 zcx666

之后到容器里的data文件夹查看

[root@2dcf9e4aa4f7 data]# ll
total 0
-rw-r--r--. 1 root root 0 May  6 13:51 666zcx
-rw-r--r--. 1 root root 0 May  6 13:47 zcx666

可以发现宿主机的刚才创建的内容也同步到了容器

宿主机和容器的数据就这样实现了同步,即使容器被删除了,两者最后同步的数据也会保存在宿主机中

容器绑定卷

不制作Dockfile镜像直接使用以下命令也可以实现容器管理卷的效果

[root@localhost /]# docker run --name centos_v -v /data:/data -itd hub.c.163.com/public/centos:6.7
2b0692157c74f96266456314ca0ee66adbbadeba146133520938f26bba2c593a
容器联合卷

不制作Dockfile镜像直接使用以下命令可以使多个容器和宿主机共享数据卷,是以上两者的加强版

通过绑定方式实现

[root@localhost /]# docker run --name centos_v1 -v /data:/data -itd hub.c.163.com/public/centos:6.7
8d5845a2e7f33d316ed37ef1ed6892130a7157c06bbc3d546e3236b8bc9e8b03
[root@localhost /]# docker run --name centos_v2 -v /data:/data -itd hub.c.163.com/public/centos:6.7
9c1381f5019aa26273fed80d8679c95214e7a53e3230755a0714eb5082193471

通过–volumes-from选项实现

[root@localhost /]# docker run --name centos_v3 -v /data:/data -itd hub.c.163.com/public/centos:6.7
9de499a9dfac8339a5bca0fb006b100fa2cd983106e8752764576b82581dd763
[root@localhost /]# docker run --name centos_v4 --volumes-from centos_v3 -itd hub.c.163.com/public/centos:6.7 
a9e2886f5dc89425a461336656dbf7216e060fe7171f4601d599281473605015

9.示例(将renren-security项目(这里也可以是其他.jar项目)打包成镜像推送到阿里云再拉取到本地运行)

准备好打包好的项目jar包(注意项目资源文件application.yml中关于数据库的相关信息)
准备好阿里云镜像仓库

新建aliyun文件夹

[root@localhost aliyun]# ll
total 62788
-rw-r--r--. 1 root root      192 Apr 23 09:37 Dockerfile
-rw-r--r--. 1 root root 64289238 Apr 23 09:37 renren-admin.jar

编写Dockerfile

FROM java:8
EXPOSE 8080
VOLUME /root/aliyun
ADD renren-admin.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT java -jar /app.jar >>/root/aliyun/nohup.out & tail -f /root/aliyun/nohup.out

构建镜像

[root@localhost aliyun]# docker build -t renren-docker:V1.0 .
Sending build context to Docker daemon  64.3 MB
Step 1/6 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete 
fce5728aad85: Pull complete 
76610ec20bf5: Pull complete 
60170fec2151: Pull complete 
e98f73de8f0d: Pull complete 
11f7af24ed9c: Pull complete 
49e2d6393f32: Pull complete 
bb9cdec9c7f3: Pull complete 
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
 ---> d23bdf5b1b1b
Step 2/6 : EXPOSE 8080
 ---> Running in 38cc8c843e92
 ---> 4469f0dbc7d8
Removing intermediate container 38cc8c843e92
Step 3/6 : VOLUME /root/aliyun
 ---> Running in aec9cfdbd385
 ---> b67e00b242a5
Removing intermediate container aec9cfdbd385
Step 4/6 : ADD renren-admin.jar /app.jar
 ---> 2807d22cae60
Removing intermediate container 7979c4c0468b
Step 5/6 : RUN bash -c 'touch /app.jar'
 ---> Running in 102404114f26
 ---> f589b64dd45a
Removing intermediate container 102404114f26
Step 6/6 : ENTRYPOINT java -jar /app.jar >>/root/aliyun/nohup.out & tail -f /root/aliyun/nohup.out
 ---> Running in 7b3fc3ab5b99
 ---> 08bb6abf20a3
Removing intermediate container 7b3fc3ab5b99
Successfully built 08bb6abf20a3

根据阿里云镜像仓库规则为该镜像打标签

[root@localhost aliyun]# sudo docker tag 08bb6abf20a3 registry.cn-hangzhou.aliyuncs.com/docker_zcx/docker_zcx_test:V1.0

其中08bb6abf20a3为renren-docker:V1.0镜像的IMAGE ID

推送到阿里云镜像仓库

[root@localhost aliyun]# sudo docker push registry.cn-hangzhou.aliyuncs.com/docker_zcx/docker_zcx_test:V1.0
The push refers to a repository [registry.cn-hangzhou.aliyuncs.com/docker_zcx/docker_zcx_test]
bb81adccdcf3: Pushed 
721278596f5d: Pushed 
35c20f26d188: Pushed 
c3fe59dd9556: Pushed 
6ed1a81ba5b6: Pushed 
a3483ce177ce: Pushed 
ce6c8756685b: Pushed 
30339f20ced0: Pushed 
0eb22bfb707d: Pushed 
a2ae92ffcd29: Pushed 
V1.0: digest: sha256:3b00fe0f32f8017b656a258942eec75a57c73657d626fd6ea885ee93b0323ec1 size: 2424

此时查看自己的阿里云镜像仓库即可观察到该镜像

此时删除刚才构建的本地镜像转而从阿里云仓库拉取刚才推送镜像

[root@localhost aliyun]# docker rmi -f 08bb6abf20a3
Untagged: registry.cn-hangzhou.aliyuncs.com/docker_zcx/docker_zcx_test:V1.0
Untagged: registry.cn-hangzhou.aliyuncs.com/docker_zcx/docker_zcx_test@sha256:3b00fe0f32f8017b656a258942eec75a57c73657d626fd6ea885ee93b0323ec1
Untagged: renren-docker:V1.0
Deleted: sha256:08bb6abf20a3b66c10ad201dd1a6f2a296c022e581475b77ed613e7886e126d5
Deleted: sha256:f589b64dd45ae2366042eb9857f9d02bc512a87d6444893c9a7fb7033aa84100
Deleted: sha256:7dc1723652ba3637c7912dcb441ee4ab9435812d34628de65d2dc1564fa8279d
Deleted: sha256:2807d22cae600c8d66d095d778ee01ea30dbf39092331a148d546f6572bbdd05
Deleted: sha256:4faf907399e0da8a033443d3cb3bfa9c8d2a30400b567724a97ffc0bef820eb8
Deleted: sha256:b67e00b242a58d331497a6db172807749b3bd946bec83c2d0489463761972f0f
Deleted: sha256:4469f0dbc7d8b03c4eb9fa6c08cfd67901848c0e968adfaf7e0582770baf0906
[root@localhost aliyun]# sudo docker pull registry.cn-hangzhou.aliyuncs.com/docker_zcx/docker_zcx_test:V1.0
V1.0: Pulling from docker_zcx/docker_zcx_test
e12c678537ae: Already exists 
8d9ed335b7db: Already exists 
3318dd58ae60: Already exists 
624ba6156166: Already exists 
c7a02d193df7: Already exists 
813b62320378: Already exists 
81cf5426393a: Already exists 
0a2b7222259b: Already exists 
83ea4ef591f3: Pull complete 
9715cdad9a2c: Pull complete 
Digest: sha256:3b00fe0f32f8017b656a258942eec75a57c73657d626fd6ea885ee93b0323ec1
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/docker_zcx/docker_zcx_test:V1.0

为运行renren-security项目,先运行一个mysql镜像并配置相关数据库文件

[root@localhost aliyun]# docker run --name mysql -d -p 3306:3306 --env MYSQL_ROOT_PASSWORD=123456 hub.c.163.com/library/mysql:latest
86d6eeb472dca42a41de5a51018d5a42955f7e6cc90ee75363c02c030e389803

MYSQL_ROOT_PASSWORD要与jar包中数据库配置一致

创建容器,运行拉取的镜像

[root@localhost aliyun]# docker run --name renren_security -p 8080:8080 -d registry.cn-hangzhou.aliyuncs.com/docker_zcx/docker_zcx_test:V1.0
a07b168c671fca792d7a56fe57ecdf2a848e5b9de1adac2c87ea4023cfbab83d

在虚拟机外访问http://192.168.20.129:8080/renren-admin即可进入人人权限系统登录页面

ZCX于2021年5月6日使用Markdown编写

Thanks For Watching!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值