编写MySQL、tomcat dockerfile文件,构建镜像、发布镜像、运行镜像

实战:安装MySQL

#获取镜像
[root@localhost /]# docker pull mysql:5.7

#运行容器,需要做数据挂载!安装启动mysql,需要配置密码,这个要注意!
#官方测试: docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

#启动

-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
[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=root --name mysql mysql:5.7

#启动成功之后,我们在本地使用sqlyog来连接测试一下
#sqlyog 连接到服务器的3306,和容器内的3306映射。

具名挂载和匿名挂载

#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /ect/ngnix ngnix 
#查看所有volume 的情况

[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
local     2a49d83f8dc7aa53bed600410117014b3be8df5ff887208d1987ed94836b4769
 
 #这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有容器外的路径!
 

#具名挂载
[root@localhost ~]# docker run -d -P --name nginx02 -v hnbc-nginx:/etc/nginx nginx
3e74e4961075ed67390ac1096ab8b54b65f889fd858e0d705791587facf9b5a1
[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
local     hnbc-nginx

#通过 -v 卷名:容器内路径
#查看一下这个路径
docker volume inspect ray-nginx

在这里插入图片描述所有的docker容器内的卷,没有指定目录的情况下都是在``/var/lib/docker/volumes/xxx`

我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的具名挂载

#如何确定是具名挂载还是匿名挂载,还是指定路径挂载!
-v 容器内路径   	 	#匿名挂载
-V 卷名:容器内路径	   #具名挂载
-v /宿主机路径:容器内路径		#指定路径挂载

拓展

#通过 -v 容器内路径:ro rw 改变读写权限
ro readonly  #只读
rw readwrite #可读可写

#一旦这个设置了容器权限,容器对我们挂载出来的内容就有限定!
docker run -d -P --name nginx02 -v hnbc-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v hnbc-nginx:/etc/nginx:rw nginx

#ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内是无法操作的!

DockerFile

DockerFile介绍

Dockerfile 就是用来构建docker镜像的构造文件!命令脚本!

构建步骤:

1、编写一个dockerfile文件

2、docker build构建成为一个镜像

3、docker run 运行镜像

4、docker ps发布镜像(DockerHub、阿里云镜像仓库)
在这里插入图片描述
在这里插入图片描述

DockerFile构建过程

基础知识

1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序执行

3、#表示注释

4、每一个指令都会创建提交一个新的镜像层,并提交!
在这里插入图片描述
dockerfile是面向开发的 ,以后要发布项目做镜像,就需要编写dockerfile文件,这个文件十分简单!

Docker镜像逐渐成为了一个企业的交付标准,必须要掌握!

步骤:开发、部署、运维。

Dockerfile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的,最终发布和运行的产品!

Docker容器:容器就是镜像运行起来提供服务器

DockerFile的指令

FROM				#基础镜像,一切从这里开始
MAINTAINER			#镜像是谁写的,姓名+邮件
RUN					#镜像构建的时候需要运行的命令
ADD					#步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR				#镜像的工作目录
VOLUME				#挂载的目录
EXPOSE				#保留端口的位置
CMD					#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT			#指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD				#当构建一个被继承 DockerFile这个时候就会运行ONBUILD	的指令。触发指令
COPY				#类似于ADD,将我们的文件拷贝到镜像中
ENV					#构建的时候设置环境变量

在这里插入图片描述

实战测试

DockerHub中99%镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行构建

在这里插入图片描述

#1、编写Dockerfile的文件
[root@localhost dockerfile]# cat docker-centos 
FROM centos
MAINTAINER ray<2281876969@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

#2、通过这个文件构建镜像
#命令dcoker build -f dockerfile文件路径 -t 镜像名:[tag]
Successfully built 00213d1ecd7b
Successfully tagged mycentos:0.1
#3、测试运行

在这里插入图片描述列出本地进行变更历史在这里插入图片描述可以研究它是怎么做的。

CMD和ENTRYPOINT区别

CMD				#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT		#指定这个容器启动的时候要运行的命令,可以追求命令 
#编写一个dockerfile文件

[root@localhost dockerfile]# vi docker-cmd-test
FROM centos 
CMD ["ls","-a"]

#构建镜像
[root@localhost dockerfile]# docker build -f docker-cmd-test -t dockercmd .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : CMD ["ls","-a"]
 ---> Running in 7597ecb2674a
Removing intermediate container 7597ecb2674a
 ---> b99e19cec11d
Successfully built b99e19cec11d
Successfully tagged dockercmd:latest

#run运行发现我们的ls -a命令生效
[root@localhost dockerfile]# docker run b99e19cec11d
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

#想追加一个命令 -l ls -al
[root@localhost dockerfile]# docker run b99e19cec11d -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.

#cmd清理下 -l 替换了CMD["ls","a"]命令,-l不是命令所以报错!

测试 ENTRYPOINT

[root@localhost dockerfile]# vi docker-cmd-entrypoint
[root@localhost dockerfile]# docker build -f docker-cmd-entrypoint -t docker-entrtpoint .
Sending build context to Docker daemon  4.096kB
Step 1/2 : FROM centos
 ---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["ls","-a"]
 ---> Running in 540ed15751d7
Removing intermediate container 540ed15751d7
 ---> 91a2b66a37ee
Successfully built 91a2b66a37ee
Successfully tagged docker-entrtpoint:latest
[root@localhost dockerfile]# docker run 91a2b66a37ee
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

#我们的追加命令,是直接拼接在我们ENTRYPOINT命令的后面!
[root@localhost dockerfile]# docker run 91a2b66a37ee -l
total 0
drwxr-xr-x.   1 root root   6 Jan 20 15:15 .
drwxr-xr-x.   1 root root   6 Jan 20 15:15 ..
-rwxr-xr-x.   1 root root   0 Jan 20 15:15 .dockerenv
lrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x.   5 root root 340 Jan 20 15:15 dev
drwxr-xr-x.   1 root root  66 Jan 20 15:15 etc
drwxr-xr-x.   2 root root   6 Nov  3  2020 home
lrwxrwxrwx.   1 root root   7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 Nov  3  2020 lib64 -> usr/lib64
drwx------.   2 root root   6 Sep 15 14:17 lost+found
drwxr-xr-x.   2 root root   6 Nov  3  2020 media
drwxr-xr-x.   2 root root   6 Nov  3  2020 mnt
drwxr-xr-x.   2 root root   6 Nov  3  2020 opt
dr-xr-xr-x. 128 root root   0 Jan 20 15:15 proc
dr-xr-x---.   2 root root 162 Sep 15 14:17 root
drwxr-xr-x.  11 root root 163 Sep 15 14:17 run
lrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 Nov  3  2020 srv
dr-xr-xr-x.  13 root root   0 Jan 20 14:13 sys
drwxrwxrwt.   7 root root 171 Sep 15 14:17 tmp
drwxr-xr-x.  12 root root 144 Sep 15 14:17 usr
drwxr-xr-x.  20 root root 262 Sep 15 14:17 var
[root@localhost dockerfile]# 

DockerFile中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比它们,然后测试!

实战:tomcat镜像

在这里插入图片描述
2、编写dockerfile文件,官方命名 Dockerfile, build会自动寻找这个文件,就不需要-f指定了!

FROM centos
MAINTAINER lym<2281876969@qq.com>
ADD apache-tomcat-8.5.75.tar.gz /usr/local/
ADD jdk-8u321-linux-aarch64.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_321
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.75
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.75
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE  8080

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

3、构建镜像

docker build -t diytomcat .

4、运行镜像

[root@localhost tomcat]# docker run -d -p 9090:8080 --name lymtomcat -v /home/lym/build/tomcat/app:/usr/local/apache-tomcat-8.5.75/webapps/app -v /home/lym/build/tomcat/logs:/usr/local/apache-tomcat-8.5.75/logs diytomcat

5、访问测试
在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dockerfile</title>
</head>
<body>
<h1>HellO Dockerfile!</h1>
<p>
 Welcome Dockerfile!
</p>
</body> 
</html> 

访问项目
在这里插入图片描述
我们以后开发的步骤:需要Dockerfile的编写!我们之后都是使用docke镜像来发布运行!

发布自己的镜像

DockerHub

1、地址https://hub.docker.com/,注册自己的账号!

2、确定这个账号可以登陆

3、在我们服务上提交自己的镜像

[root@localhost app]# docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username

4、登陆完毕后就可以提交镜像了,就是一步,docker push

[root@localhost app]# docker login -u lym7951
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

#push自己的镜像到服务器
[root@localhost tomcat]# docker push diytomcat
Using default tag: latest
The push refers to repository [docker.io/library/diytomcat]
f1cccb8234dc: Preparing 
f4fefa1eec06: Preparing 
18e7bf733333: Preparing 
74ddd0ec08fa: Preparing 
denied: requested access to the resource is denied #拒绝

#push 镜像的问题?
root@localhost tomcat]# docker push lym/diytomcat:1.0
The push refers to repository [docker.io/lym/diytomcat]
An image does not exist locally with the tag: lym/diytomcat

#解决,增加一个tag

[root@localhost tomcat]# docker tag b99e19cec11d lym/tomcat1.0

#docker push上去即可
[root@localhost tomcat]# docker push lym/diytomcat:1.0
The push refers to repository [docker.io/lym/diytomcat]
f1cccb8234dc: Preparing 
f4fefa1eec06: Preparing 
18e7bf733333: Preparing 
74ddd0ec08fa: Preparing 

提交的时候也是根据镜像的层级来提交的!

因为DockerHub是国外网站,普通的虚拟机访问会被拒绝,无法上传!

发布到阿里云镜像

1、登陆阿里云

2、找到容器镜像服务

3、创建命名空间

在这里插入图片描述4、创建容器镜像
在这里插入图片描述
5、浏览阿里云
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值