本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

Docker运维教程(2)Docker镜像与容器管理

发布:TangLu2019-2-20 12:03分类: Docker+K8S 标签: docker k8s

从2017年开始Docker已经分为了CE社区版和EE企业版,其命令行也发生了变化。在CE版本中对命令进行了分组,使用docker --help命令可以看到Management Commands下包含了一些组,每个组下又包含了许多子命令。所以在新版本中运行命令的方式是docker+组名+子命令的方式,而老版本中直接是docker+子命令。虽然为了兼容性,新版本支持以前的命令格式,但是推荐使用新的管理方式。

docker container create  #新格式
docker create  #老格式
docker container --help  #查看指定组所支持的子命令

一、Docker镜像仓库提前了解

镜像仓库的概念就和YUM仓库一样,里面存放了各种镜像以供下载,比如我们通常会去下载Centos的系统镜像作为基础镜像,然后再在其上做自定义设置。默认的镜像仓库是官方的docker hub,由于该仓库地址是在国外,所以国内速度会比较慢,建议配置国内的镜像仓库,如daocloud.io或者阿里云加速器。配置完成后重启docker并使用docker info命令查看下是否生效。

vi /etc/docker/daemon.json
{
  "registry-mirrors": [ "https://registry.docker-cn.com" ]
}


二、Docker镜像管理常用命令介绍

1、查看当前系统中所有镜像的基本信息,如镜像ID、创建时间、镜像大小等——docker images

docker1.png


2、在默认的镜像仓库docker hub中进行搜索,也可以自定义其他镜像仓库——docker search

docker search nginx

# INDEX代表了镜像来源于哪个仓库,默认是docker.io
# NAMES:镜像的名字,如果名字没有用/分割代表是顶级仓库,通常是官方提供的镜像。而带/的前面是用户名,后面才是镜像名,后续安装和启动都需要用到这个名字
# DESCRIPTION:镜像的描述信息 
# STARS:是获得的星数,也就是评分或热门程度
# OFFICIAL:官方认证


docker2.png


3、从指定的公网仓库中下载指定的Docker镜像——docker pull

docker pull [registry[:port]/]name:tag  #registry是仓库地址,默认为docker hub;name是镜像名字,完整格式是<用户名>/<镜像名>,用户名不写的话默认使用官方镜像;tag是镜像标签
docker pull docker.io/nginx  #下载公网镜像,这里没有指明仓库地址默认就是docker hub
docker pull quay.io/coreos/flannel  #从quay.io这个公网仓库的coreos名称空间中下载镜像flannel镜像,标签默认为lastest

docker3.png


4、通过镜像名字或者ID来删除已下载的Docker镜像——docker rmi

docker rmi 688353a31fde


dockerimages.png


三、Docker容器管理常用命令介绍

1、通过镜像来运行容器,如果镜像不存在会去仓库中下载——docker run。该命令包含了许多子选项:

    -d:以后台方式运行容器,该选项需要配合-i、-t选项一起使用,否则容器一运行就会立即中断,还需要再手动start

    -it:这里包含了i和t两个选项,代表使用交互方式打开一个容器的终端以便执行命令

    -e:定义容器启动后的环境变量

    --dns:自定义容器的DNS地址

    --name:定义容器本身的名字

    --hostname:定义容器运行后的主机名,否则会使用容器的ID作为主机名

    --add-host:为容器的hosts文件增加记录

    --rename :修改容器名字

#使用docker ps命令可以看到命令后的名称
docker run -it --name=centos_test --hostname=server1 centos /bin/bash  #尾部的/bin/bash是让容器保持打开这个进程,以免容器状态结束
docker rename server1 server2  #将1重命名为2


dockername.png


    -p:Docker容器端口映射。该选项会将指定的容器中的端口暴露到物理机上所指定的某个端口上,这样访问物理机端口就可以访问到容器中的服务。比如在容器中安装sshd服务,然后把22端口映射出去就可以在物理机上远程登录容器了。使用netstat命令或者docker ps命令、docker port命令都可以查看到端口映射关系

#把容器中80端口映射到物理机8000端口,如果容器监听了多个端口就暴露多次
docker run --name test_nginx --rm -p 80 linuxe # 不写宿主机端口则是一个随机端口
docker run --name test_nginx --rm -p 8000:80 linuxe  #宿主机端口为8000,网络接口为ALL
docker run --name test_nginx --rm -p 192.168.1.100:8000:80 linuxe  #指定了网络接口

docker port nginx #查看nginx容器的端口映射关系


    --restart:Docker容器的自启动,使用该选项后容器会跟随宿主机的启动而自我启动。该选项默认值是no,改为yes即可
docker run -itd --restart=yes  -name=centos_docker1 docker.io/ansible/centos7-ansible /bin/bash
    --rm
容器命令运行后自动删除容器。常用于云主机环境,需要短期且大量的Docker虚拟机工作,工作完成后自动销毁
docker run -it --rm --name test docker.io/centos sleep 5  #sleep 5执行完毕后就会删除这个镜像


2、容器的启动、停止、重启与杀死,需要注意的是启动其实是创建和运行的结合,也就是docker create+docker start——docker container start、docker container stop、docker container restart、docker container kill 

docker container restart nginx_docker
docker container kill test_nginx


3、有时候需要暂停容器工作一段时间,比如进行快照、暂时释放宿主机资源——docker pause、docker unpause

docker pause centos:v1 #pause后不暂用宿主机资源
docker unpause centos:v1



4、容器信息的查看——docker container ps、docker container inspect、docker container port

docker ps命令用来查看正在运行的容器信息,加上-a选项可以查看已经退出的容器;docker port命令可以查看容器端口的映射信息;docker inspect命令可以查看容器更详细的底层信息,如容器运行后默认执行什么命令(cmd)、每个容器的IP信息(这就是为什么能通过宿主机访问容器中服务的原因,在安装了Docker后网卡配置里多了一个docker0的网卡,之后建立的容器都是跟该网卡在一个网段内,默认是172.段),如果想获取某一个大类下的子类信息,使用语法:

docker container inspect -f {{.NetworkSettings.IPAddress}} nginx  #获取nginx容器下的IP信息,可以精确到小类
docker port test_nginx  #查看端口映射情况


docokerin.png



5、Docker容器的进入与退出——docker container attach、docker container exec

进入容器有2种方法,docker attach和docker exec,然后跟上容器的名字或者ID即可

docker exec -it 775c7c9ee1e1 /bin/bash  


dockerattach.png


attach与exec的区别:attach直接进入容器正在运行的命令中,不会启动新的进程,比如容器是在执行一个无限循环进行输出,那attach进入后则会看到这些输出信息。而exec则是开启一个新的终端,并且可以启动新的进程。如果想直接在终端中查看启动命令的输出用attach,其他情况都使用exec即可。


容器运行后如果要退出的话,不要使用exit命令来退出终端,这样容器状态会成为exitd状态,里面的服务也就无法正常使用了。需要使用ctrl+p+q这样的组合键进行退出,这样可以保持容器状态是UP。如果容器已经是exitd状态,通过docker start命令启动来恢复运行

dockerexit.png


6、给镜像打标签——docker tag命令


docker tag 38baaxh26s6661 tanglu/centos:v1.1  #给一个没有标签的镜像打上标签,这里没有写仓库地址,默认是dockerhub,完整格式就是dockerhub/tanglu/centos:v1.1
docker tag tanglu/centos:v1.1 tanglu/centos:v1.2  #修改标签


7、删除Docker容器

如果要删除已经停止的容器则使用docker rm命令,删除镜像的话使用的是docker rmi命令,跟上镜像名称或者ID都可以删除。如容器没有停止的话是无法直接删除的,需要加上-f选项或者先停止掉容器,使用命令是docker stop或者docker kill,然后跟上ID或者镜像名称,停止后再执行删除就可以了。dockerrm.png




温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《Docker运维教程(2)Docker镜像与容器管理
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-470.html  [生成短网址]

已有 0/512 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~