8.10——Docker容器管理、Dockerfile
一、容器管理
运行镜像:
docker run 镜像名称
这个过程可以理解为:把镜像文件创建成docker容器的一部分,然后再进行启动,特别需要注意的是:容器内的进程必须是前台运行状态,否则容器直接退出。
容器命令 在运⾏镜像中,后⾯需要带⼀些指令的信息,这些指令的信息具体汇总为如下:
- -d:后台运⾏
- -it:交互式命令(bash)
- --rm:容器挂掉后⾃动被删除
- --name:给容器起⼀个名字
- -(小)p:端⼝映射
- -(大)P:指定任意的端口
二、log查看
查看日志方式:(能查看到容器的任何操作)
1、查看动态的日志——日志在实时的更新,一直查看最后的日志信息)
docker logs -f 容器id
注意:查看动态日志时,有两个命令控制台,一个操作容器,另一个实时查看,这时所有的操作都会实时显示出来。
2、查看静态的日志——把日志文件下载下来,打开查看
docker logs 容器id
3、筛选查看日志(windows不能用此命令)
docker logs 容器ID | head -N:开始N行日志文件
docker logs 容器ID | tail -N:最后N行日志文件
三、提交容器
场景:
在⼀个容器⾥⾯,⽐如centos⾥⾯安装了vim的编辑器,如果没进⾏提交,那么下次进⼊还需要安装vim的编辑器,这其实是⾮常不友好的,我们更加想要的是⼀个容器⾥⾯安装对应的应⽤程序后,下次进⼊还是存在的,这就需要我们提交容器,这有利于数据迁移。
语法格式
docker commit 容器id 新镜像名字
操作步骤:
- 先进入到容器里面 :docker run -it --rm centos:7.8.2003 bash
- 在容器里面安装第三方的软件 :yum install vim
- 查看容器的ID :docker ps -a | findstr centos
- 然后提交(提交期间,容器是不能退出:docker commit 容器id 新镜像名字
注意:提交的容器是一个新容器,如果要操作 需要退出exit原来的容器,再run运行提交的容器。
四、镜像导出与导入
场景
在企业案例中,我们往往打包成⼀个镜像后,就会打包,然后把它发送给其他的同学来使⽤。那么在本案例中,我主要包⼀个centos的镜像,⾥⾯也是安装了vim的编辑器,然后再在另外⼀个docker的导⼊和执⾏。
镜像导⼊导出的场景:异地的办公模式,那么场景就是:异地的开发同学写完代码后,然后把⾃⼰的应⽤程序打包成镜像,打包成镜像后,发送给测试同学,测试同学运⾏镜像(前提是把镜像导⼊中docker中),镜像运⾏成功后,等于环境部署成功,可以测试通许可以开始测试了。
开发同学操作:
1、写代码
2、写的代码打包成镜像
3、把镜像导出
4、发送给测试同学
测试同学操作:
1、接收开发发送的镜像
2、导⼊镜像到docker中
3、运⾏镜像
4、开始测试
1、导出镜像
安装vim
开始导出
(1)先删除镜像
(2)重新导入
五、容器停⽌&启动
六、Dockerfile实战
Dockerfile概述
使用dockerfile主要是用于构建docker镜像文件信息,相当于一个脚本,通过dockerfile自己的指令,来构建软件依赖,文件依赖,存储等等情况。
Dockerfile组成部分
- 基础镜像信息
- 制作镜像操作指令 RUM
- 容器启动时执⾏指令CMD["/bin/bash"]
Dockerfile指令
Dockerfile基本指令
- FROM #指令基础镜像
- MAINTAINER #指定维护者信息,也可以没有
- dc42dd7323a3
- [root@wuyaShare ~]# docker port dc42dd7323a3
- 80/tcp -> 0.0.0.0:80
- 运⾏容器信息
- [root@wuyaShare ~]# docker run -it --rm centos:7.8.2003 bash
- [root@3466f8fe336c /]# touch index.txt
- 通过exec命令的⽅式进⼊到交互式的命令信息
- [root@wuyaShare ~]# docker exec -it 3466f8fe336c bash
- [root@3466f8fe336c /]# ls
- anaconda-post.log dev home lib media opt root sbin sys usr
- bin etc index.txt lib64 mnt proc run srv tmp var
- RUN #具体执⾏的操作,在命令前⾯加上RUN即可
- ADD #COPY⽂件,会⾃动进⾏解压
- WORKDIR #设置当前⼯作⽬录
- VOLUME #设置卷,挂载主机⽬录
- EXPOSE #指定对外的端⼝
- CMD #指定容器启动后需要⼲的事情
- COPY #复制⽂件
- ENV #环境变量
- ENTRYPOINT #容器启动后执⾏的命令
通过dockerfile构建centos镜像的过程
(1)新建一个文件夹,在文件夹中新建一个文件,文件内输入:
FROM centos:7.8.2003 (指定基础镜像)
MAINTAINER XX (创建人)
ENV name Docker (定义一个变量,变量的值是Docker)
ENTRYPOINT echo "Hello $name" (运行程序,输出变量的值,输出的值是 Hello Docker)
如:创建一个 learndocke文件夹,在文件夹中创建一个dockerfile的文件。
(2)打开控制台,进入创建的文件夹dockerfile中
cd D:\Users\29660\Desktop\dockerfile
d:
(3)输入docker scan 后,再输入y
4)登录到docker hub的账户
命令如下:
docker login
然后输入docker hub的账户和密码
(5)再次开始构建镜像 docker build -t centos_name -f dockerfile .
docker build 构建镜像;
-t:
-d:指定Dockerfile文件夹。
6)运行镜像 docker run -it --rm centos_name
2、nginx部署
(1)新建一个文件夹,在文件夹中新建一个文件,文件内输入:
FROM nginx (指定基础镜像)
MAINTAINER XX (创建人)
RUN echo "Hi, This Is A Docker Continer WebSite" > /usr/share/nginx/html/index.html (运行在html中输出Hi, This Is A Docker Continer WebSite)
EXPOSE 80(80端口)
如:创建一个 dockerfile文件夹,在文件夹中创建一个dockerfile的文件。
2)打开控制台,进入创建的文件夹dockerfile中
命令如下:
cd D:\Users\29660\Desktop\dockerfile
d:
(3)再次开始构建镜像docker build -t website .
docker build 构建镜像;
-t:指定文件名(自定义);
-d:指定Dockerfile文件夹。
(4)运行镜像 docker run -it --rm centos_name
在网页中输入https://localhost:80回车,出现下图则上传成功
image-20220810180725472
如果端口被占用,可参考该网址解决
win7.win10进程pid4占用80端口的解决办法 - 电脑教程 (geren-jianli.org)