Ubuntu-docker-dockercompose-分层镜像-实现单机版nginx+tomcat操作

目录

一、docker常用命令
二、 基于alpine基础镜像构建常见的系统服务, [nginx/jdk /tomcat]
三、将构建的镜像放在阿里云仓库。
四、 将构建的镜像,放在自建的harbor中,并且单独可以提供相应的服务
五、docker的常见网络模式
六、用docker-compose 将2中构建的镜像组合起来提供服务。

一、docker常用命令

在这里插入图片描述

1.1查看命令

命令 解释
docker ps 查看正在运行的容器

docker ps

在这里插入图片描述

docker ps -a 查看所有已经创建的容器
docker images 列出镜像列表
docker container ls 效果同ps命令(加-a效果同)
docker ps 详细参数
-a :显示所有的容器,包括未运行的。

-f :根据条件过滤显示的内容。

–format :指定返回值的模板文件。

-l :显示最近创建的容器。

-n :列出最近创建的n个容器。

–no-trunc :不截断输出。

-q :静默模式,只显示容器编号。

-s :显示总的文件大小。
docker images 详细参数
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

–digests :显示镜像的摘要信息;

-f :显示满足条件的镜像;

–format :指定返回值的模板文件;

–no-trunc :显示完整的镜像信息;

-q :只显示镜像ID。

1.2删除命令

命令 解释
docker rm 删除容器
docker rmi 删除镜像
docker rm 详细参数
-f :强制删除一个运行中的容器

-l :移除容器间的网络连接,而非容器本身

-v :-v 删除与容器关联的卷
docker rmi 详细参数
-f :强制删除;

–no-prune :不移除该镜像的过程镜像,默认移除;

1.3宿主机操作

命令 解释
docker cp 容器与主机之间的数据拷贝
docker cp 实例
docker cp nginx:/www /tmp/ #将nginx容器的/www 拷贝到本地/tmp下

1.4生命周期命令

命令 解释
docker start 启动容器
docker stop 停止容器
docker restart 重启容器
docker exec 在运行的容器中执行命令
docker run 创建一个新的容器并运行一个命令
docker exec 详细参数
-d :分离模式: 在后台运行

-i :即使没有附加也保持STDIN 打开

-t :分配一个伪终端

#实例
docker exec -it nginx /bin/bash
docker run 详细参数
-i, --interactive=false 打开STDIN,用于控制台交互
-t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
-d, --detach=false 指定容器运行于前台还是后台,默认为false
-u, --user=“” 指定容器的用户
-a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
-w, --workdir=“” 指定容器的工作目录
-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
-e, --env=[] 指定环境变量,容器中可以使用该环境变量
-m, --memory=“” 指定容器的内存上限
-P, --publish-all=false 指定容器暴露的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname=“” 指定容器的主机名
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录 顺序:主机:容器
–volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
–cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
–cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
–cidfile=“” 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
–cpuset=“” 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
–device=[] 添加主机设备给容器,相当于设备直通
–dns=[] 指定容器的dns服务器
–dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
–entrypoint=“” 覆盖image的入口点
–env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
–expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
–link=[] 指定容器间的关联,使用其他容器的IP、env等信息
–lxc-conf=[] 指定容器的配置文件,只有在指定–exec-driver=lxc时使用
–name=“” 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
–net=“bridge” 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似–net=bridge),但是不进行配置
–privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
–restart=“no” 指定容器停止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
–rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
–sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

1.5镜像仓库命令

命令 解释
docker pull 拉取镜像
docker search 从Docker Hub查找镜像
1.6docker环境信息命令
命令 解释
docker info 查看docker系统信息
docker version 显示 Docker 版本信息

二、 基于alpine基础镜像构建常见的系统服务, [nginx / jdk / tomcat]

安装docker

下载镜像

在这里插入图片描述

如果你过去安装过 docker,先删掉:

sudo apt-get purge docker-ce docker-ce-cli containerd.io -y

首先安装依赖:

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y

信任 Docker 的 GPG 公钥:

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

添加软件仓库:

sudo add-apt-repository \
"deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu
\ $(lsb_release -cs) \ stable"

在这里插入图片描述

限制最新的docker版本安装

apt-cache madison  docker-ce
apt install docker-ce=5:19.03.15~3-0~ubuntu-bionic docker-ce-cli=5:19.03.15~3-0~ubuntu-bionic -y

在这里插入图片描述

验证版本

docker version

在这里插入图片描述

sudo apt-get update
apt-get install docker-ce docker-ce-cli containerd.io -y
docker info

安装完成描述

构建nginx镜像

docker pull nginx

在这里插入图片描述
使用宿主机的8888端口映射nginx容器的80端口,这样它可以在当前终端的前台运行。

docker run -it -p 8888:80 nginx

在浏览器就可以访问了:
在这里插入图片描述

分层构建镜像

在这里插入图片描述

构建centos底层镜像

先做一个基本镜像:
root@10ubuntu-yangk:~# cd /opt/dockerfile/system/centos/
root@10ubuntu-yangk:/opt/dockerfile/system/centos# vim Dockerfile

Dockerfile内容
#指定基础镜像(后期会在这里创建TAG获取时间戳传参)
FROM centos:7.8.2003

#添加作者信息
LABEL MAINTAINER="yk 568656476@qq.com"
#并安装基础命令
RUN yum install -y epel-release && yum install -y gcc libgcc libc-dev libcurl libc-utils pcre-dev zlib-dev libnfs make pcre pcre2 zip unzip net-tools pstree wget libevent libevent-dev iproute2 openssl-devel iotop vim gcc-c++ aotumake pcre pcre-devel zlib openssl lrzsc tree
 
#创建用户
RUN groupadd www -g 2022 && useradd www -u 2022 -g www

构建镜像脚本:
vim build-command.sh
#!/bin/bash
docker build -t harbor.magedu.com/m43/centos-base:7.8.2003 

执行脚本
bash build-command.sh

在这里插入图片描述

第二层 jdk镜像

创建文件夹(便于管理)
root@10ubuntu-yangk:/opt/dockerfile/web/jdk# mkdir jdk-8u-212
root@10ubuntu-yangk:/opt/dockerfile/web/jdk# cd jdk-8u-212/
root@10ubuntu-yangk:/opt/dockerfile/web/jdk/jdk-8u-212# 
jdk下载网址:https://www.oracle.com/java/technologies/downloads/#java8-linux

在这里插入图片描述

jdk下载网址:https://www.oracle.com/java/technologies/downloads/#java8-linux

xftp上传报错:
解决(相关路径): chmod 777 /opt/dockerfile/web/jdk/jdk-8u-212

准备Dockerfile
root@10ubuntu-yangk:/opt/dockerfile/web/jdk/jdk-8u-212# vim Dockerfile

#添加作者信息
LABEL MAINTAINER="yk 568656476@qq.com"

#添加jdk路径并解压
ADD jdk-8u212-linux-x64.tar.gz /usr/local/src

#jdk做软连接,方便后期升级
RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/local/jdk
ADD profile /etc/profile

#环境变量
ENV name magedu
#ENV JAVA_HOME /usr/local/jdk
#ENV JRE_HOME $/JAVA_HOME/jre

准备build脚本
root@10ubuntu-yangk:/opt/dockerfile/web/jdk/jdk-8u-212# vim build-command.sh
#!/bin/bash
docker build -t harbor.magedu.com/m43/centos-jdk-bash:8u212 .

拷贝profile,并在其中添加环境变量
docker cp c5802c69f688:/etc/profile .

在这里插入图片描述

vim profile
最下方添加:
export JAVA_HOME=/usr/local/jdk/
export TOMCAT_HOME=/apps/tomcat
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

运行构建脚本
bash build-command.sh 

在这里插入图片描述

进容器测试:
root@10ubuntu-yangk:/opt/dockerfile/web/jdk/jdk-8u-212# docker run -it --rm harbor.magedu.com/m43/centos-jdk-bash:8u212 bash
[root@5bd91b61b05f /]# cat etc/profile

在这里插入图片描述

测试java环境:
[root@5bd91b61b05f /]# su - www
[www@5bd91b61b05f ~]$ java -version

在这里插入图片描述
给root加env

root@10ubuntu-yangk:/opt/dockerfile/web/jdk/jdk-8u-212# vim Dockerfile
最后加上:
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
重构
root@10ubuntu-yangk:~# docker run -it --rm harbor.magedu.com/m43/centos-jdk-bash:8u212 bash

在这里插入图片描述

第三层tomcat镜像层

创建文件件
进到tomcat(略)
网站:https://tomcat.apache.org/,下载tomacat压缩包
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.65/bin/apache-tomcat-8.5.65.tar.gz

在这里插入图片描述

准备Dockerfile
#tomecat base image
FROM harbor.magedu.com/m43/centos-jdk-base:8u212

#添加作者信息
LABEL MAINTAINER="yk 568656476@qq.com"

#这次使用挂载,容器数据备份
#VOLUME /data /apps 
ADD apache-tomcat-8.5.65.tar.gz /apps 

#jdk做软连接,方便后期升级,后期把这个软连接换一下版本就直接升级了,其他步骤不用做了,因为tomcat是公用的,最后放入代码再构建一次就OK了
RUN ln -sv /apps/apache-tomcat-8.5.65 /apps/tomcat

准备构建脚本
root@10ubuntu-yangk:/opt/dockerfile/web/tomcat# vim build-command.sh
#!/bin/bash
docker build -t harbor.magedu.com/m43/tomcat-centos-base:v8.5.65

执行构建脚本
bash build-command.sh

在这里插入图片描述

进入容器,运行tomcat
docker run -it harbor.magedu.com/m43/tomcat-centos-base:v8.5.65 bash
apache-tomcat-8.5.65

[root@d237da51437c /]# chown www.www /apps/ -R
[root@d237da51437c /]# su - www -c "/apps/tomcat/bin/catalina.sh start"


在这里插入图片描述

退出,映射端口运行
docker run -it -p 8080:8080 harbor.magedu.com/m43/tomcat-centos-base:v8.5.65 bash

浏览器访问
在这里插入图片描述

第四层:业务层镜像

在这里插入图片描述

创建文件夹
mkdir tomcat-base-8.5.65

在这里插入图片描述

进入app1路径,新建Dockerfile
#项目(magedu)档期(m43) tomecat app1
FROM harbor.magedu.com/m43/tomcat-centos-base:v8.5.65

#添加作者信息
LABEL MAINTAINER="yk 568656476@qq.com"

#添加tpmcat脚本,app(通常都是var包)这里用目录做个示例,这样是不严谨的
#ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
ADD hello-world.tar.gz /apps/tomcat/webapps/


#修改权限
RUN chown www.www /apps/ -R

#声明端口
EXPOSE 8080 8443

上传压缩.war文件
tar czvf hello-world.tar.gz   hello-world.war

在这里插入图片描述

启动tomcat脚本
#[root@d237da51437c /]# chown www.www /apps/ -R
#[root@d237da51437c /]# su - www -c "/apps/tomcat/bin/catalina.sh start"
root@10ubuntu-yangk:/opt/dockerfile/web/tomcat/tomcat-app1# vim run_tomcat.sh
#!/bin/bash
#chown www.www /apps/ -R
su - www -c "/apps/tomcat/bin/catalina.sh start"
tail -f /etc/hosts

构建脚本
构建:root@10ubuntu-yangk:/opt/dockerfile/web/tomcat/tomcat-app1# vim build-command.sh
#!/bin/bash
docker build -t harbor.magedu.com/m43/tomcat-m43:app1 . 

执行构建脚本
bash build.sh

在这里插入图片描述

测试:
docker run -it --rm -p 8000:8080 harbor.magedu.com/m43/tomcat-m43:app1;

在这里插入图片描述

三、将构建的镜像放在阿里云仓库。

登录阿里云,开通实例(个人版)

在这里插入图片描述

构建镜像并上传

1. 登录阿里云Docker Registry
$ docker login --username=aliyun7477019344 registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/yangkaibvv/centos-app:[镜像版本号]
3. 将镜像推送到Registry
$ docker login --username=aliyun7477019344 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/yangkaibvv/centos-app:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/yangkaibvv/centos-app:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId][镜像版本号]参数。

4. 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。

5. 示例
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ docker images
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
$ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用 "docker push" 命令将该镜像推送至远程。

$ docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

上传成功

四、 将构建的镜像,放在自建的harbor中,并且单独可以提供相应的服务

安装harbor之前要先安装docker(同上)、docker-compose,安装docker-compose:

下载docker-compos压缩包:https://goharbor.io/
在这里插入图片描述

在这里插入图片描述
放入指定路径:

cd /usr/local/src/harbor/

解压之后,直接查看版本

./docker-compose-Linux-x86_64 version

在这里插入图片描述
在这里插入图片描述

安装harbor
root@10ubuntu-yangk:/usr/local/src/harbor# ./install.sh 

在这里插入图片描述
在这里插入图片描述

拷贝简化:
root@10ubuntu-yangk:/opt# cp docker-compose-Linux-x86_64 /usr/bin/docker-compose 
保证系统可以执行docker-compose命令

在这里插入图片描述

修改配置文件:

vim harbor.yml

在这里插入图片描述
在这里插入图片描述

本地加解析:

在这里插入图片描述

访问自己的域名

在这里插入图片描述

新建项目

在这里插入图片描述

上传镜像

本地docker服务器加解析

vim /etc/hosts

在这里插入图片描述

添加信任

vim /lib/systemd/system/docker.service 
--insecure-registry harbor.magedu.com

在这里插入图片描述

docker服务器登录harbor

docker login harbor.XXXXu.com

在这里插入图片描述

更改tag

docker tag harbor.magedu.com/m43/centos-base:7.8.2003 harbor.XXXXdu.com/m43/centos-base:7.8.2003

上传镜像

docker push harbor.XXXXdu.com/m43/centos-base:7.8.2003

在这里插入图片描述上传成功
在这里插入图片描述

启动02,从harbor上pull镜像并验证,重复上述操作

docker pull harbor.XXXXdu.com/m43/tomcat-m43:app2

运行并访问: 成功
在这里插入图片描述

五、docker的常见网络模式

5.1 bridge模式(重点讲,其他略)

利用宿主机的网卡进行通信,因为涉及到网络转换,所以会造成资源消耗,网络效率会低。
在这里插入图片描述

启动docker-01

docker run -it -d --name XXXXu-tomcat-app1   harbor.XXXXu.com/m43/tomcat-m43:app1

启动nginx容器:–link

docker run -it -d -p 80:80 --link XXXXdu-tomcat-app1 nginx:latest

在这里插入图片描述

进入容器

进入容器:
root@10ubuntu-yangk:~# docker exec -it bdb684e9ec5d bash

在这里插入图片描述

 cat /etc/hosts

在这里插入图片描述### 可以看到另一个容器的地址已经被加到hosts解析中,ping测试
在这里插入图片描述成功

5.2 host模式

特点:容器和宿主机共享网络

5.3 container模式

新创建的容器间使用已创建的容器网络,类似一个局域网
特点:容器和容器间共享网络

5.4 none模式

这种模式最纯粹,不会帮你做任何网络的配置,可以最大限度的定制化。

5.5 overlay/overlay2模式

容器彼此不再同一网络,而且能互相通行。

六、用docker-compose 将2中构建的镜像组合起来提供服务。

安装docker-compose(略)、拉取nginx镜像(上文)、拉取tomcat镜像(上文)

在这里插入图片描述

单机版docker-compose+nginx+tomcat快速实现

配置docker-compose.yml

version: '3.9'
services:
    nginx-server:
      image: nginx:latest      
      # image: harbor.XXXXdu.com/m43/tomcat-m43:app1
      container_name: nginx-web1
      #network_mode: bridge #网络1,使用docker安装后的默认网桥
      networks:  #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有两块网卡
#        - front
        - backend
      expose:
        - 80
        - 443
      ports:
        - "80:80"
        - "443:443"
      links:
        - tomcat-service-app1

    tomcat-service-app1:
      image: harbor.XXXXdu.com/m43/tomcat-m43:app1
      container_name: tomcat-app1
      #network_mode: bridge #网络1,使用docker安装后的默认网桥
      volumes:
        - /data/testapp:/data/tomcat/webapps/testapp
      networks: #网络2,使用自定义的网络,如果网络不存在则会自动创建该网络并分配子网,并且容器会有两块网卡
        - backend
      expose:
        - 8080
        - 8443
      ports:
        - "8080:8080"
        - "8443:8443"

networks:
  front: #自定义前端服务网络
    driver: bridge
  backend: #自定义后端服务网络
    driver: bridge          
  default: #使用已经存在的docker0默认172.17.0.1/16的网络
      external:
        name: bridge

配置nginx文件:

root@aadcb36e92ce:/# vim /etc/nginx/nginx.conf ,这里不能粘贴,只能sed流插入到最后
显示servername
echo " upstream web{
  server tomcat-service-app1:8080;
  }
    server{
         listen 80; 
         server_name localhost;
         #charset koi8-r;
         #access_log logs/host.access.log main; 
         location / {
             root /data/nginx/html; 
             index index.html index.htm;
         }
         #error_page 404      /404.html;
         
         # redirect server error pages to the static page /50x.html 
         error_page 500 502 503 504  /50x.html; 
         location = /50x.html {
         root html;
         }
         location /hello-world {
         proxy_pass http://web;
         }
         #proxy the PHP scripts to Apache listening on 127.0.0.1:80
         }" >>  /etc/nginx/nginx.conf


重启nginx

/usr/sbin/nginx -s reload

访问nginx页面:http://10.0.0.152/hello-world/
在这里插入图片描述
访问nginx自动跳转到tomcat业务页面

如果觉得对您有用,请点个赞哦♪(^∀^●) ↓↓↓

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值