Docker 镜像、容器、仓库
Docker的一些概念
- docker image docker镜像
即容器模板,操作系统+软件运?环境+?户程序
类似于安装操作系统的windows镜像、centos镜像,只是一个模板
- Docker container docker容器
容器是从镜像运行的实例,比如用tomcat镜像运行tomcat,就得到一个tomcat容器
容器,是应用程序的容器,tomcat容器是运行tomcat的,mysql容器是运行mysql的,微服务的容器是运行某个微服务的
一个镜像可运行多个容器(实例),好比一个类可以new多个对象,这个容器是相互隔离的,互不影响。
- Docker registerie docker仓库
?于存储镜像,分为公有仓库、私有仓库,好?Maven的中央仓库和本地仓库。
docker的公有仓库在国外,访问速度慢,需要我们配置一下国内的镜像,常用的镜像加速器比如阿里云、网易的
配置阿里云的镜像加速器
登录阿里云,搜索容器镜像服务 -> 找到镜像加速器 -> centos,把那一串命令复制到centos上执行即可
每个人分配的加速器地址不同,需要登录阿里云才会分配加速器地址。
启动、停止Docker
启动docker:systemctl start docker
停止docker:systemctl stop docker
重新加载docker的配置:systemctl daemon-reload
重启docker:systemctl restart docker
image 镜像常用命令
在公有仓库中搜索镜像:docker search tomcat
此处是搜索tomcat的镜像,会列出相关的所有镜像,包括官方的、组织机构、个人上传的
只列出官方的镜像:docker search --filter is-official=true tomcat
只列出star数>=10的镜像:docker search --filter stars=10 tomcat
下载|拉取镜像:docker pull tomcat:9
冒号后面指定版本,如果不指定,默认下载公有仓库中的最新版latest,下载到本地仓库
docker镜像的体积很大,往往几百兆、几个G,因为镜像不仅包含应用程序,还包含了所需的环境、依赖。
查看本地仓库中的镜像:docker images
第一列是镜像名称,第二列tag是镜像的版本号,最新版不会显示具体的版本号,会显示为latest
删除本地仓库中的镜像:docker rmi tomcat #会删除所有版本的tomcat镜像,rmi即remove images
docker rmi tomcat:9 #只删除指定版本的tomcat
container 容器常用命令
从镜像运行一个容器:docker run -itd --name=tomcat1 tomcat:9
-it:都要有,以交互方式运行容器,分配命令行等交互资源
-d:以守护线程的方式在后台运行,比如不使用-d,运行后当前标签页不可用,需重起一个标签页执行命令,如果关闭当前标签页或在当前标签页中Ctrl+C,都会终止该容器的运行。
--name:指定容器的name,如果不使用--name,会自动化分配一个name
如果不指定镜像的版本号,默认使用最新版latest,如果本地仓库没有最新版,会自动从公有仓库拉取
-d会返回容器id,很长,往往只取一部分。id、name都唯一标识一个容器
启动容器:docker start id|name
停止:docker stop id|name
重启:docker restart id|name
docker run是创建并运行容器,docker start是运行一个已存在的容器
有些容器在docker run创建运行时,需要设置参数,比如msyql就需要设置数据库密码,如果不设置参数,会创建但启动失败
容器的环境都是打包好的,环境没有问题,如果使用docker run或docker start启动失败,说明没有设置某些参数
查看正在运行的所有容器:docker ps #第一列id就只列出了id的一部分,这一部分也可以唯一标识一个容器
查看所有容器:docker ps -a #a即all,正在运行+停止
状态一栏,Up表示该容器正在运行,Exited表示该容器处于停止状态,时间是停止|启动了多久
查看容器的详细信息:docker inspect id|name
删除容器:docker rm id|name #容器要是已停止的才能删除。rm是删除容器,rmi是删除镜像,i是images
强制删除容器:docker rm -f id|name #如果容器正在运行,也能删除
进入容器:docker exec -it id|name /bin/bash
一个容器就是一个虚拟机,进入容器相当于进入一个Linux服务器,照样可以执行linux命令,可以修改容器配置、程序参数
exit #退出容器,只是退出该容器的命令行,该容器仍在运行
批量操作容器:
那些根据id|name操作单个容器的命令,都可以同时操作多个容器,
eg. docker start id1|name1 id2|name2 #启动多个容器,空格间隔
可以用 $(docker ps -a -q) 表示所有容器的id|name(正在运行+已停止)
eg. docker start $(docker ps -a -q) #启动所有容器