docker镜像与docker容器

docker镜像与docker容器

镜像与容器的关系

镜像:(例如系统安装镜像)

已经装好环境的虚拟机(运行一次 就是一个容器(新的操作系统))

! 当作是容器的 ”源代码“

如同面向对象中的类

容器: (装好的系统)

一个一个的操作系统,或者是已经装好东西的系统

如同面向对象的对象

镜像

修改docker 镜像源

docker-ce | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

镜像相关命令

docker search 包名          	   # 搜索包  一般都是去hub.docker.com
# docker search python    		# 搜索一个只是装好了python的环境

docker pull  包名
# docker pull cento           	# 直接下载最新版
# docker pull centos:7       	# 通过: 指定版本

docker images                  	# 查看已经下载的镜像

# 删除(用的比较少)  除了通过镜像id删除,也可以通过名字删除
# 如果镜像已经有容器了,那就不能(该)删除,(不管容器是否是启动的)
docker rmi 镜像id              	# 删除镜像 # 镜像id可以只输入前三位
docker rmi `docker images -q`        # 删除所有的镜像

关于搜索镜像

其实不怎么建议使用docker search ,更建议直接去hub.docker搜索

容器

容器命令

镜像跑起来就是容器了

docker ps      # 查看运行中的容器  
	# 默认是查看运行中的容器
	-a  查看所有容器(不管你有没有运行)
	-l   查看最后一次运行的容器
	-f status=exited            查看停止的容器


启动容器(创建)(基于images):
	docker run 
		# docker run -id --name 自己取得的容器名 镜像名()  /bin/bash
		# # docker run -di --name=mysql8 c0cdc95609f1 /bin/bash
		-i:表示运行容器
		-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
		--name :为创建的容器命名。
		-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
		-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
		-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
		
		来自 <https://www.cnblogs.com/xiaoyuanqujing/articles/11774978.html> 
		
启动容器(已经有了的容器)
	docker start 容器id/名字
	
停止容器
	docker stop 容器id/名字
	
重启容器
	docker restart 容器id/名字
	
进入容器内部
	docker exec -it 容器id/名字 /bin/bash
	docker exec -it 容器id/名字 sh          # 如果上面的办法不行,就用这个办法
	
退出容器内部
	exit
	
删除容器
	docker rm 容器名字/id       # 正在运行的容器不能删除

容器拷贝

向里面拷贝:
	# 宿主机>容器
	docker cp 需要拷贝的文件或目录 容器名称:容器目录
	
	来自 <https://www.cnblogs.com/xiaoyuanqujing/articles/11774978.html> 
	
	
	
向外面拷贝:
	# 容器> 宿主机
	docker cp 容器名称:容器目录 需要拷贝的文件或目录
	
来自 <https://www.cnblogs.com/xiaoyuanqujing/articles/11774978.html> 

目录映射(挂载)

目录映射(挂载)
	docker run -di -v 宿主机路径:内部路径 --name=新容器名 镜像名
	# docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
	# 如果创建的时候是 it 而不是id,那么它会自动进去,然后推出来的时候就会自动关闭
	

查看容器的ip详细信息(例如查看ip)

查看容器ip地址
	docker inspect 容器名字/id
	# 会有一堆resft接口(json 格式)
	# 我们自需要去看他的IP地址
	
	# 这个方法是单看ip地址
	docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
	

举例(安装一个mysql的容器,然后把3306端口映射出来)

Mysql的docker官方指引

# 安装mysql的容器(如果本地没有镜像,他会自动去网上下载)
docker run --name=sqls8 --restart on-failure -d mysql/mysql-server:8.0
# 此方法来自mysql官方的docker指引教程(https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html)

# 启动mysql容器服务
docker start sql8

# 查看mysql的初始root密码(mysql8.0会自动随机分配)
docker logs sqls8 2>&1 | grep GENERATED    # windows没有自带grep命令,建议换成findstr 或者就直接使用docker logs sqls8 2>&1  然后ctrl + f 手动查找 GENERATED

# 下面那一坨就是mysql的默认密码了,拿到密码我们就可以在外部进行连接了(到这里我就不演示了,因为目的已经达到了)

image-20210623113150064

如果想要自己开始就设置密码的话,创建容器的命令就应该是:

docker run -id -p 3306:3306 --name=sql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

反打包

容器 打包为 镜像,然后把镜像打包为镜像文件

然后通过镜像生成更多容器,或者把镜像文件拷贝给别人用(文件会比较大)

打包 容器->镜像->镜像文件

# 容器-> 镜像
docker commit 容器名字 镜像名字
# docker commit sql8 sql8_1

# 镜像-> 镜像文件
docker save -o 压缩后文件名 镜像名字
# docker save -o sql8_1.tar sql8_1
# 打包好后,就可以直接拷贝给别人用了

解包 镜像文件->镜像

# 镜像文件->镜像
docker load -i 文件名
# docker load -i .sql8_1.tar

镜像文件-> 容器 我这就不说了, 上面有…… 容器

原文地址:https://www.cnblogs.com/pscly/p/14922034.html