Docker的数据卷的挂载和dockerfile的制作

部署 Tomcat 之 Commit 镜像

开启 docker

systemctl start docker

查看 docker 镜像

docker images

查看 docker 容器

 docker ps -a

交互模式启动 Tomcat

docker run -it -p 8080:8080 tomcat

进入 Tomcat 容器

 docker exec -it 7bace7bfed93 /bin/bash

进入Tomcat,完善镜像
官方镜像默认 webapp 下没有文件

cp -r webapps.dist/* webapps

win 10 谷歌访问
在这里插入图片描述
退出 Tomcat 容器

exit

提交自己定义或修改之后的 Tomcat 的镜像

docker commit -a="coffeemao" -m="add webapps app" 7bace7bfed93 tomcat01:1.0

查看

[root@localhost ~]# docker commit -a="coffeemao" -m="add webapps app" 7bace7bfed93 tomcat01:1.0
sha256:c48ce45d3268cc5b8d436bdbf3d66d239eb3b9be27717d0239680f6cc63fa574
[root@localhost ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
tomcat01              1.0       c48ce45d3268   11 seconds ago   684MB
nginx                 latest    605c77e624dd   7 months ago     141MB
tomcat                latest    fb5657adc892   8 months ago     680MB
portainer/portainer   latest    580c0e4e98b0   17 months ago    79.1MB
[root@localhost ~]# 

发布需要 dockerfile,docker pull tomcat是不完整版本

docker 启动容器

[root@localhost ~]# docker start 7bace7bfed93

容器数据卷

数据如果在容器中,容器一旦删除,就会造成删库跑路,需求数据持久化
容器数据卷技术:MySQL数据存储在本地,容器之间存在一个共享技术,Docker 容器中产生的数据,同步到本地挂载 -v,容器之间数据共享,容器的持久化和同步操作。

docker run -it -v 虚拟机目录:/home centos /bin/bash

[root@localhost /]# docker run -it -v /home/ceshi:/home centos /bin/bash
Unable to find image 'centos:latest' locally

在这里插入图片描述
在这里插入图片描述
容器内部建立文件,文件外部同步双向同步

在这里插入图片描述

关闭容器

[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED             STATUS                        PORTS                                       NAMES
7bd01d3d65b2   centos                "/bin/bash"              15 minutes ago      Exited (0) 19 seconds ago                                                 elegant_heyrovsky
6316bac4f9b1   nginx                 "/docker-entrypoint.…"   27 minutes ago      Exited (137) 26 minutes ago                                               nginx
7bace7bfed93   tomcat                "catalina.sh run"        About an hour ago   Exited (143) 25 minutes ago                                               youthful_chebyshev
a38797375cb9   portainer/portainer   "/portainer"             9 days ago          Up About an hour              0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   competent_ardinghelli
[root@localhost /]# docker ps
CONTAINER ID   IMAGE                 COMMAND        CREATED      STATUS             PORTS                                       NAMES
a38797375cb9   portainer/portainer   "/portainer"   9 days ago   Up About an hour   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   competent_ardinghelli
[root@localhost /]# docker stop a38797375cb9
a38797375cb9
[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED             STATUS                        PORTS     NAMES
7bd01d3d65b2   centos                "/bin/bash"              16 minutes ago      Exited (0) 45 seconds ago               elegant_heyrovsky
6316bac4f9b1   nginx                 "/docker-entrypoint.…"   27 minutes ago      Exited (137) 26 minutes ago             nginx
7bace7bfed93   tomcat                "catalina.sh run"        About an hour ago   Exited (143) 25 minutes ago             youthful_chebyshev
a38797375cb9   portainer/portainer   "/portainer"             9 days ago          Exited (2) 6 seconds ago                competent_ardinghelli
[root@localhost /]# 

关闭容器之后,在主机上对hello.java文件进行修改,在开启容器,进入正在运行的容器(attach),查看已经同步。

[root@localhost /]# docker start 7bd01d3d65b2
7bd01d3d65b2
[root@localhost /]# docker attach 7bd01d3d65b2
[root@7bd01d3d65b2 /]# cd /home
[root@7bd01d3d65b2 home]# ls
hello.java  word.java
[root@7bd01d3d65b2 home]# cat hello.java 
public class hello{
	public static void main(String[] args){
		System.out.println("hello,java");
}
}
[root@7bd01d3d65b2 home]# exit
exit
[root@localhost /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost /]# 

备注进入容器推荐:

[root@localhost ~]# docker exec -it f57e2a1ee1aa /bin/bash
root@f57e2a1ee1aa:/# ls
bin   dev			  entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint-initdb.d  etc		 lib   media  opt  root  sbin  sys  usr

优点:挂载之后,以后直接在本地进行修改,容器内部会自动的同步

MySQL的同步技术

配置MySQL密码
https://hub.docker.com/_/mysql
docker分配的主机:mysql自己的主机3306:3306

[root@localhost ~]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
f57e2a1ee1aa61e86d38ee7f7db224e12f2e401e73cbb7d561352c414423952a
[root@localhost ~]# 

在这里插入图片描述
本地MySQL可视化连接工具可以连接
Navicat 上连接,建立数据库docker_test之后,进入虚拟机映射的目录进行查看,可以发现文件已经共享同步实现。
在这里插入图片描述
假设将容器删除,文件依旧保存到虚拟机上,不会删除

具名挂载和匿名挂载

匿名挂载

[root@localhost ~]# docker run -d -p 80:80 --name nginx01 -v /etc/nginx nginx

在这里插入图片描述
具名挂载

# 具名挂载
[root@localhost ~]# docker run -d -p 80:80 --name nginx02 -v juming_nginx:/etc/nginx nginx
2013475b401f289787df485a3e31445bd961316ef3317e531d0fb5065a63570e
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
2013475b401f   nginx     "/docker-entrypoint.…"   6 seconds ago   Up 4 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx02
[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
# 匿名挂载
local     9cec5c43ffa11fe81f8c5b64f209fa4b80dcf4986b9db58d9dcbb8fd34d96ecb
local     e8573755ba1b68d10626d688a7f770d3c0c66807afc540ee7a261ea18103b0e1
# 具名挂载
local     juming_nginx

[root@localhost /]# docker volume inspect juming_nginx 
[
    {
        "CreatedAt": "2022-08-26T15:30:56+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming_nginx/_data",
        "Name": "juming_nginx",
        "Options": null,
        "Scope": "local"
    }
]
[root@localhost /]# cd var/lib/docker
[root@localhost docker]# ls
buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes
[root@localhost docker]# cd volumes/
[root@localhost volumes]# ll
总用量 24
drwx-----x. 3 root root     19 826 15:19 9cec5c43ffa11fe81f8c5b64f209fa4b80dcf4986b9db58d9dcbb8fd34d96ecb
brw-------. 1 root root 253, 0 826 10:07 backingFsBlockDev
drwx-----x. 3 root root     19 816 18:22 e8573755ba1b68d10626d688a7f770d3c0c66807afc540ee7a261ea18103b0e1
drwx-----x. 3 root root     19 826 15:30 juming_nginx
-rw-------. 1 root root  32768 826 15:30 metadata.db
[root@localhost volumes]# cd juming_nginx/
[root@localhost juming_nginx]# ll
总用量 0
drwxr-xr-x. 3 root root 132 826 15:30 _data
[root@localhost juming_nginx]# cd _data/
[root@localhost _data]# ll
总用量 24
drwxr-xr-x. 2 root root   26 826 15:30 conf.d
-rw-r--r--. 1 root root 1007 1228 2021 fastcgi_params
-rw-r--r--. 1 root root 5349 1228 2021 mime.types
lrwxrwxrwx. 1 root root   22 1228 2021 modules -> /usr/lib/nginx/modules
-rw-r--r--. 1 root root  648 1228 2021 nginx.conf
-rw-r--r--. 1 root root  636 1228 2021 scgi_params
-rw-r--r--. 1 root root  664 1228 2021 uwsgi_params
[root@localhost _data]# cat nginx.conf 

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

docker volume inspect juming_nginx 查看具名挂载的位置
在这里插入图片描述注意原来的Centos7 被裁减之后,有些基本的命令没有

自定义一个 Dockerfile 文件

FROM centos:7
MAINTAINER coffeemao<2750506316@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "------end------"
CMD /bin/bash 
docker build -f dockerfile -t mycentos:0.1 .

在这里插入图片描述

Linux登录DockerHub和退出

[root@localhost code]# docker login -u username
Password: 

Login Succeeded
[root@localhost code]# docker logout
Removing login credentials for https://index.docker.io/v1/

Dockerfile 制作Tomcat 镜像

环境准备

[root@localhost environment]# ll
总用量 176284
-rw-r--r--.  1 root root  11593900 827 12:51 apache-tomcat-9.0.65.tar.gz
-rw-r--r--.  1 root root       645 828 16:05 Dockerfile
-rw-r--r--.  1 root root 168907175 827 12:51 jdk-11.0.16.1_linux-x64_bin.tar.gz
drwxrwxr-x. 17 mao  mao       4096 324 12:05 Python-3.5.2
-rw-r--r--.  1 root root         0 827 12:52 readme.txt

Dockerfile文件编写

FROM centos:7
MAINTAINER coffeemao<2750506316@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-11.0.16.1_linux-x64_bin.tar.gz /usr/local/
ADD apache-tomcat-9.0.65.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.65
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.65
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.65/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.65/logs/catalina.out 

如果运行报错话docker logs 容器名字 查看报错内容对应进行修改
可能报错有Tomcat 版本不一致导致部分目录没有,JDK 版本不一致,目录冲突

启动

[root@localhost environment]# docker build -t diytomcat .
Sending build context to Docker daemon  366.9MB
Step 1/15 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/15 : MAINTAINER coffeemao<2750506316@qq.com>
 ---> Using cache
 ---> 1e092941a253
Step 3/15 : COPY readme.txt /usr/local/readme.txt
 ---> cf0f007a016a
Step 4/15 : ADD jdk-11.0.16.1_linux-x64_bin.tar.gz /usr/local/
 ---> 01f121798e0d
Step 5/15 : ADD apache-tomcat-9.0.65.tar.gz /usr/local/
 ---> 8471193a83d7
Step 6/15 : RUN yum -y install vim
 ---> Running in 3e6ab25db0a8
......
Successfully built c44606f4f964
Successfully tagged diytomcat:latest

挂载


[root@sail tomcat]# docker run -d -p 8080:8080 --name coffeemaotomcat -v /home/mao/tomcat/webapps:/usr/local/apache-tomcat-9.0.65/webapps -v /home/mao/tomcat/logs:/usr/local/apache-tomcat-9.0.65/logs diytomcat 
9d391e13efdc495206429dbdb0392180a7bd3a4750cbc1419c31c80cd69c6b7b



[root@localhost environment]# docker run -it -d -p 8080:8080 --name tomcattest -v /home/mao/tomcat1/webapps:/usr/local/apache-tomcat-9.0.65/webapps -v /home/mao/tomcat1/logs/:/usr/local/apache-tomcat-9.0.65/logs diytomcat
230c89dfe6aeff874a207eb30424755d1fef3280ff7767cbaf1c48354612ac73

挂载成功

[root@localhost mao]# cd build
[root@localhost build]# ll
总用量 0
drwxr-xr-x. 4 root root 36 828 16:21 tomcat
[root@localhost build]# cd tomcat/
[root@localhost tomcat]# ll
总用量 0
drwxr-xr-x. 2 root root  6 828 16:21 test
drwxr-xr-x. 2 root root 26 828 16:21 tomcatlogs
[root@localhost tomcat]# 
[root@localhost mao]# curl localhost:8080

进入 容器查看一下
在这里插入图片描述

外部访问curl访暴露的端口,不能在容器内部

因此在本地就可以发布项目,由于tomcat 不断更新,目录结构存放的内容要求也不同,所以必须和自己下载的tomcat 保持一致,不然会报404 错误

Dockerfile制作tomcat镜像,解决404问题

在这里插入图片描述

配置java 环境变量

1、删除旧版本和自带的java 环境变量

 rpm -qa | grep gcj


 rpm -qa | grep jdk

yum -y remove [上面查出来的所有有关jdk的名字]

java -version

jdk-8u11-linux-x64.tar下载

解压缩和环境变量的配置

tar -xzvf jdk-8u11-linux-x64.tar.gz

vim /etc/profil

export JAVA_HOME=自己解压缩的路径
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

配置更新加载
source /etc/profile
[root@localhost environment]# ll
总用量 166628
-rw-r--r--.  1 root root  11593900 827 12:51 apache-tomcat-9.0.65.tar.gz
-rw-r--r--.  1 root root       640 828 17:09 Dockerfile
drwxr-xr-x.  8   10  143       255 617 2014 jdk1.8.0_11
-rw-r--r--.  1 root root 159019376 828 17:57 jdk-8u11-linux-x64.tar.gz
drwxrwxr-x. 17 mao  mao       4096 324 12:05 Python-3.5.2
-rw-r--r--.  1 root root         0 827 12:52 readme.txt
[root@localhost environment]# java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
[root@localhost environment]# 

发布到阿里云

$ docker login --username= registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/---/coffeemao_docker:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/---/coffeemao_docker:[镜像版本号]

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值