赞
踩
dockerfile执行的大致流程:
总结:
dockerfile关键字总结:
简单案例:
准备工作:先删除所有容器:
然后我们查看一下docker hub上原生的的centos是怎样的:不支持vim和ifconfig等命令
第一步:编写Dockerfile脚本:
准备步骤1-4:
(1):按照上面的操作删除所有容器
(2):pwd查看当前位置,并进入根目录(cd /)
(3):在根目录下创建文件夹mydocker。
(4):在mydocker文件夹中创建一个文件:vi Dockerfile2
(5):编写d Dockerfile2文件内容如下:
FROM centos
ENV mypath /tmp
WORKDIR $mypath
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash
第二步:构建/制作镜像:
[root@fancentos7 mydocker]# docker build -f /mydocker/dockerfile2 -t mycentos:1.3 .
第三步:运行镜像:
先查看:docker images
docker run -it mycentos:1.3
cmd说明:
案例二:
案例三:
制作entroypoint版本:
onbuild使用案例:
第一步:我们需要在宿主机下的文件夹mydocker下操作。进去文件夹并查看数据卷:
(1)cd / :回到根目录
(2)cd mydocker
(3)ll :查看数据卷
(4)vim/vi dockerfile4
from centos
RUN yum install -y curl
ENTRYPOINT ["curl","-s","http://ip.cn"]
ONBUILD RUN echo "father onbild ----8888"
然后绑定:
docker build -f /mydocker/dockerfile4 -t myip_father .
然后查看刚才命名的镜像myip_father:
docker images
父镜像制作完毕!
然后我们开始制作子镜像:
在mydocker文件夹下,复制一个父的dockerfile改写一下使用:
cp dockerfile4 dockerfile5
然后vim dockerfile5
修改from myip_father
然后制作build子镜像:
docker build -f /mydocker/dockerfile5 -t myip_son .
出现这句话证明使用父类的东西:
Step 1/4 : from myip_father
Executing 1 build trigger
第一步:创建文件夹tomcat8:
cd /:回到根目录
mkdir -p fanuse/mydockerfile/tomcat8:级联创建文件夹
第二步:创建文件readme.txt:这是一个备用说明文件
cd /fanuse/mydockerfile/tomcat8
touch readme.txt
第三步:拷贝需要的压缩包(将两个压缩包放到opt目录下备用):
然后拷贝:
cp /opt/apache-tomcat-8.5.69.tar.gz /fanuse/mydockerfile/tomcat8
cp /opt/jdk-8u291-linux-x64.tar.gz /fanuse/mydockerfile/tomcat8
然后我们tomcat9文件夹下已经有了三个文件:apache-tomcat-8.5.69.tar.gz,jdk-8u291-linux-x64.tar.gz ,readme.txt
第四步:在fanuse/mydockerfile/tomcat9目录下新建dockerfile脚本文件:vim Dockerfile1
Dockerfile1文件内容如下:
FROM centos MAINTAINER fan<541564201@qq.com> COPY readme.txt /usr/local/readme.txt ADD jdk-8u291-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-8.5.69.tar.gz /usr/local/ RUN yum -y install vim ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_291 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.69 ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.69 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-8.5.69/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.69/bin/logs/catalina.out
第五步:构建镜像,-t后跟的是自定义的标签名字
docker build -f /fanuse/mydockerfile/tomcat8/Dockerfile1-t fantomcat8 .
第六步:运行镜像:并挂载数据卷
docker run -d -p 9080:8080 --name fantomcat8 -v /fanuse/mydockerfile/tomcat8/test:/usr/local/apache-tomcat-8.5.69/webapps/test -v /fanuse/mydockerfile/tomcat8/tomcat8logs/:/usr/local/apache-tomcat-8.5.69/logs --privileged=true fantomcat8
第七步:验证:
内网访问:[root@fancentos7 tomcat8]# curl localhost:9080
外网访问:
linux的ip:端口号
查看默认设置的路径usr/local下有什么内容:
测试:jdk版本:
第八步:发布项目:(由于做了数据卷的挂载,我们直接在本地编写项目就可以发布)
(1)我们的本地有一个test目录,存放的是项目:
test目录详细情况:
test目录下需要有一个WEB-INF文件夹,所以我们自己创建一个:mkdir WEB-INF
(2)然后进入WEB-INF,在里面写一个web.xml:vim web.xml
百度一个web.xml,将内容复制到web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
(3)需要一个a.jsp:回到test目录下创建:
jsp内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
文件编写完毕就可以网页访问了。
(4)测试:
修改测试:
(5)查看tomcat日志:
dockerfile总结:
先在centos中启动docker服务
命令:systemctl start docker :启动docker服务
docker images:查看镜像
第一步:搜索镜像:docker search mysql
第二步:拉取:docker pull mysql:8.0.22
第三步:运行镜像:
docker run -p 3307:3306 --name mysql8.0.22 -v /fanuse/mysql/conf:/etc/mysql/conf.d -v /fanuse/mysql/logs:/logs -v /fanuse/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.22
注意:(1)端口是否已经被占用,如不能使用3306,被本地mysql占用了)(2)当下载拉取两个不同版本的mysql的时候,一定要将-v后的存储目录进行更改。不然系统混装,会出错。然后注意自己本地安装的mysql的是8.0还是5.7,要匹配。
第四步:查看mysql8.0容器运行情况:
然后返回一个容器id,并使用docker ps查看是否运行成功。
第五步:docker登录mysql:
docker exec -it 容器id /bin/bash
mysql -uroot -p
然后输入:show databases; 注意分号要加的。
外部win10连接docker中的mysql:
三、服务器命令行操作:
进入容器:docker exec -it 容器id /bin/bash
登录mysql: mysql -uroot -p(u,p后面跟的是用户名和密码)
授权:ALTER user ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘root’;
刷新:FLUSH PRIVILEGES;
然后:show databases;
然后界面这里连接:
数据备份:
commit能使我们跟充分的理解镜像的原理:即分层的联合文件系统。
我们的镜像本质是一层一层的,他支持对文件的修改作为一次提交来一层一层的叠加。好比一个vm的快照。
首先启动docker :systemctl start docker
然后查看镜像:docker images
然后运行tomcat:docker run -it -p 8080:8080 tomcat
然后退出:ctrl+p+q
然后查看正在运行的容器:docker ps (发现tomcat已经启动成功)
然后进入正在运行的tomcat容器中:docker exec -it 容器id /bin/bash
然后如下:因为我们的webapp文件夹中没有任何东西的。需要将webapps.dist中的东西拷贝进webapp中:
[root@fancentos7 ~]# docker exec -it d485532d6424 /bin/bash
root@d485532d6424:/usr/local/tomcat# ls
BUILDING.txt NOTICE RUNNING.txt lib temp work
CONTRIBUTING.md README.md bin logs webapps
LICENSE RELEASE-NOTES conf native-jni-lib webapps.dist
root@d485532d6424:/usr/local/tomcat#
然后拷贝:cp webapps.dist/* webapps
root@d485532d6424:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@d485532d6424:/usr/local/tomcat# cd webapps
root@d485532d6424:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
然后网页测试:输入: 自己的centos的ip:8080
出现以下页面代表成功:
然后我们提交我们修改后的容器:
先ctrl+p+q退出容器:然后查看所有镜像:docker ps
[root@fancentos7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d485532d6424 tomcat "catalina.sh run" 20 minutes ago Up 20 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp angry_hopper
[root@fancentos7 ~]# docker commit -a="fan" -m="add webapps app" d485532d6424 tomcat02:1.0
sha256:ed78c64646c52df1eb03688af2e319375b602a4a33747cd714551599780d7989
[root@fancentos7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 ed78c64646c5 21 seconds ago 673MB
tomcat latest 266d1269bb29 6 days ago 668MB
nginx latest dd34e67e3371 7 days ago 133MB
portainer/portainer latest 580c0e4e98b0 5 months ago 79.1MB
[root@fancentos7 ~]#
提交的参数如下:
这样我们的本地镜像就多了一个tomcat2:1.0版本。可以发布了。
第一步去官网注册账号:https://hub.docker.com/
然后在docker服务中登录:
[root@fancentos7 test]# docker login -u fandongdong666
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
[root@fancentos7 test]#
4、tag修改镜像名称
格式:docker tag nginx:v1 注册的名字/nginx-io:v1
[root@fancentos7 test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
fantomcat8 1.0 e4cf1aa7651a 2 hours ago 652MB
fantomcat8 latest e4cf1aa7651a 2 hours ago 652MB
fancentos 1.1 ee8623ecf0b3 3 hours ago 307MB
tomcat02 1.0 ed78c64646c5 10 hours ago 673MB
tomcat latest 266d1269bb29 6 days ago 668MB
nginx latest dd34e67e3371 8 days ago 133MB
portainer/portainer latest 580c0e4e98b0 5 months ago 79.1MB
mysql 8.0.22 d4c3cafb11d5 7 months ago 545MB
centos latest 300e315adb2f 8 months ago 209MB
[root@fancentos7 test]# docker tag fantomcat8:1.0 fandongdong666/fantomcat8:1.0
推送镜像的规范是:
docker push 注册docker用户名/REPOSITORY:TAG
docker push fandongdong666/fantomcat8:1.0
发布自己的镜像的具体步骤:
第一步:登录到阿里云,https://www.aliyun.com/ 一定要是官网标志
第二步:找到容器镜像服务 控制台
然后点击加号创建个人版的实例:并创建仓库密码
然后创建命名空间:
然后创建本地仓库:
第一步:搜索
docker search nginx
第二步:下载镜像
docker pull nginx
第三步:运行镜像,生成容器
docker run -d --name nginx01 -p 80:80 nginx
第四步:测试
curl localhost:80
-p 3344:80端口暴露的原理:
第一步:搜索镜像docker search tomcat
第二步:下载镜像 docker pull tomcat
第三步:查看是否下载下来了镜像:docker images
第四步:启动tomcat镜像
注:前者是外围访问端口:后者是容器内部端口
docker run -d -p 8080:8080 tomcat
注:前者是外围访问端口:后者是容器内部端口
如下命令可后台启动tomcat
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
5、查看正在运行的容器
docker ps
请参考:https://blog.csdn.net/jabony/article/details/90020939
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。