• 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
    

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

  • 相关阅读:
    Python开发环境搭建(Windows)
    Pycharm安装第三方库
    Python 更新pip报错:Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
    centos7.4 yum install报错:Another app is currently holding the yum lock; waiting for it to exit...
    [PySide]在简易在线词典中使用多线程
    三菱PLC——Dx Developer的使用
    关于BeautifulSoup编码的一些问题
    超简单的Ghost安装双系统方法
    《Visual C++ 2008入门经典》学习笔记(1)——数据类型
    win下硬盘安装ubuntu(无需光驱、U盘)
  • 原文地址:https://www.cnblogs.com/pscly/p/14922034.html
Copyright © 2020-2023  润新知