如何用docker来打包镜像

第一部分

Docker官网:https://www.docker.com/

一、帮助命令

docker version 			# 显示docker的版本信息
docker info 			# 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help   	   # 帮助命令

二、镜像命令

安装镜像的搜索网址:

https://hub.docker.com/

2.1、下载镜像
docker images			 # 查看所有本地主机上的镜像

docker search mysql      # 搜索镜像

docker pull --help 		 # 下载镜像
docker pull mysql:5.7    # 指定MySQL的版本

2.2、删除镜像
docker rmi -f id		 # 删除指定的镜像,remove image,加上镜像ID
docker rmi -f id id id 	 # 删除多个镜像
docker rmi -f $(docker image -aq)   # 批量删除全部的image(-f表示全部删除,即force,-ap查询命令)

三、容器命令

下载CentOS镜像

docker pull centos

新建容器并启动

docker run --help
docker run [可选参数] image
# 参数说明
--name="Name"		容器名字  Tomcat1 Tomcat2 用来区分容器
-d 					后台方式运行
-it					使用交互方式运行,进入容器查看内容
-p					指定容器的端口,-p  8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
-P					随机指定端口

启动并进入容器

docker run -it centos /bin/bash

从容器中退回主机

exit			# 直接停止容器并退出
Ctrl + P + Q	# 容器不停止退出
ls

列出所有的运行容器

docker ps
-a 			# 列出当前正在运行的容器,带出历史运行过的容器
-n=? 		# 显示最近创建的容器
-q			# 只显示容器的编号
docker ps -a

删除容器

docker rm 容器id						# 删除指定的容器,不能删除正在运行的容器,如果要强制删除,加采纳数rm -f
docker rm -f $(docker ps -aq)	 	 # 删除所有的容器	
docker ps -a -q | xargs docker rm 	 # 删除所有的容器(管道命令)

启动和停止容器的操作

docker start 容器ID		# 启动容器
docker restart 容器ID		# 重启容器
docker stop 容器ID		# 停止正在运行的容器
docker kill 容器ID		# 强制停止当前容器

四、常见其他命令

后台启动容器

docker run -d 镜像名
docker run -d centos
# 问题:docker ps,发现centos停止了

# 常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

# Nginx容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序运行了

查看日志

docker logs --help
docker logs -f -t --tail 容器ID			# 容器如果没有日志
# 自己编写shell脚本
"while true;do echo OriginalCoder;sleep 1;done"
docker run -d centos /bin/sh -c "while true;do echo OriginalCoder;sleep 1;done"
docker ps # 查看容器ID

显示日志
-tf   				# 显示日志(-t:时间戳,-f:持续显示日志)
--tail number 		# 要显示的日志条数
docker logs -ft --tails 10 容器ID(10代表打印的条数)

查看容器中进程信息ps

docker ps 			# 查看容器ID
docker top 容器ID

查看镜像的元数据

docker inspect --help
docker ps -a
docker inspect 容器ID

进入当前正在运行的容器

通常情况下,容器都是后台运行的,需要进入容器中,修改一些配置

# 方式一
docker exec -it 容器ID /bin/bash
ls
ps -ef

# 方式二
docker attach 容器ID

区别
# docker exec 		进入容器后开启一个新的终端,可以在里面操作
# docker attach 	进入容器正在执行的终端,不会启动新的进程

从容器内拷贝文件到主机上

docker cp 容器ID: 容器内路径 目的主机路径
docker ps
docker images
docker run -it centos /bin/bash
docker ps 


docker attach 容器ID
cd /home
ls
容器内新建一个文件
# touch test.java
exit
docker ps -a
# 将这个文件拷贝出来到主机上
docker cp 容器ID:/home/test.java /home
ls

安装vim

apt-get install vim

安装apache2

apt-get install apache2 -y

安装装php和php插件

apt-get install php -y
apt-get install libapache2-mod-php -y  --fix-missing
apt-get install php7.0-mysql

第二部分

一、实战:安装MySQL

思考:MySQL的数据持久化问题

# 获取镜像
docker search mysql
docker pull mysql:5.7

# 运行容器,需要做数据挂载
# 安装启动mysql,需要配置密码(注意点)
# 官方测试:docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p
# 运行
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字	
docker run -d -p 3310:3306 -v /home/mysql.conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
# 启动成功之后,可以在Windows本地机测试

假设我们将容器删除

docker rm -f mysql01
docker ps
docker ps -a

回到宿主机查看,发现数据都还在! 我们挂载到本地的数据卷没有丢失,这就实现了容器数据持久化功能。

二、具名挂载和匿名挂载

# 匿名挂载
-v 容器内路径
docker run d -P --name nginx01 -v /etc/nginx nginx

# 查看所有数据卷的情况
docker volume ls

 

三、DockerFile

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

mkdir docker-test-volume
ls
pwd
cd docker-test-volume/
pwd

# 通过下面这个脚本,可以生成镜像,镜像是一层一层的,脚本是一层层的命令,每一个命令都是一层
vim dockerfile1
	FROM centos
	VOLUME ['volume01','volume02']
	CMD echo "----end----"
	CMD /bin/bash
	ESC
	:wq

# 查看dockerfile1
cat dockerfile1
# 
docker build -f /home/docker-test--volume/docekrfile1 -t rich/centos:1.0 .

启动自己写的容器
在这里插入图片描述

这个卷和外部一定有一个同步的目录

四、打包Docker镜像

1、构建SpringBoot项目

2、打包应用

3、编写DockerFile

4、构建镜像

5、发布运行

以后在使用Docker的时候,给别人一个Docker的镜像就可以

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐