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

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

一、Docker 镜像管理

自从Docker分为CE版和EE版后,命令行也发生了变化。在CE版本中对命令进行了分组,并且支持命令补全,包括版本号都可以自动补全。通过docker --help命令可以看到 Management Commands 包含多个组,这些组都是被操作的对象。不同的组有不同的子命令,所以目前通常都是使用"docker+对象名+子命令"的命令格式(老版本是“docker+子命令”。虽然以前的命令格式也可以继续使用,但是更推荐使用新的命令格式进行管理

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


1、查看镜像

使用docker images命令查看当前系统中已下载的镜像信息,包含镜像名称(REPOSITORY)、标签(TAG)、镜像ID(IMAGE_ID)、创建时间(CREATED)、镜像大小(SIZE)等

docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    0cf1d6af5ca7   17 hours ago   161MB


2、搜索镜像

使用docker search命令可以在默认的镜像仓库中进行镜像搜索,搜索结果中没有带用户名信息的镜像通常是官方镜像

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


3、下载镜像

使用docker pull或docker image pull从指定的公网仓库中下载指定的Docker镜像,如果一个镜像存在多个版本,需要先到Docker Hub中确认每个版本的标签才能正确的下载

# registry默认为dockerhub;镜像名格式是<用户名>/<镜像名>,用户名不写的话默认使用官方镜像;镜像标签默认为latest
# docker pull [registry地址[:端口]/]镜像名:标签 
docker pull nginx  #从dockerhub中下载官方nginx镜像
docker pull bitname/wordpress  #从dockerhub下载bitname所提供的wordpress镜像
docker pull quay.io/coreos/flannel:v1.1  #从quay.io这个公网仓库的coreos名称空间中下载镜像flannel镜像,标签为v1.1


4、删除镜像

使用docker rmi或docker image rmi命令可以通过镜像名字或者ID来删除已下载的Docker镜像,ID可以只输入前缀,保持唯一即可

[root@centos1 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    0cf1d6af5ca7   18 hours ago   161MB

[root@centos1 ~]# docker rmi 0cf1d
Untagged: nginx:latest
Untagged: nginx@sha256:7150b3a39203cb5bee612ff4a9d18774f8c7caf6399d6e8985e97e28eb751c18
Deleted: sha256:0cf1d6af5ca72e2ca196afdbdbe26d96f141bd3dc14d70210707cf89032ea217
Deleted: sha256:61633ce66c62a864471c8b5378d9ffa3f81c766a960a3590211f3221c1ab4a59
Deleted: sha256:41b747d79cc454963fb711facd1ece56107a1cea116f91f9f2226a8ad2f6aa7a
Deleted: sha256:5517b4dad484d2bd81693cb01c59de8d731101babc8f4e25af94839b01cb8101
Deleted: sha256:97ee1d7582029102147c004b04f96d5bca5bdd9142a91c2164f8d86069a430c3
Deleted: sha256:995b22525898b5afc8b76051e02d5f4ffd7fde6aae7d2098545978c4768b73d2
Deleted: sha256:d56d0c05af74d3308643ed2eb1c57c8a56ebe1922068720f393b30a285072b93
Deleted: sha256:188c9b34dfbe022075d01fc4f5a305412909ef97de440783c15043e68e1b1913


5、查看镜像构建

使用docker history命令可以查看镜像构建过程

docker histrosy image_name


6、镜像标签

使用docker tag命令实现为镜像打标签,通常在需要上传镜像到仓库中时就需要标记好镜像所属仓库地址和用户(也可以直接用 docker build -t 在创建镜像的时候就起好名字)

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


二、Docker 容器管理

1、运行容器

docker run命令用于运行镜像成为容器,如果运行的镜像并不存在于本地则会自动去仓库拉取。该选项包含以下子选项:

docker run -d:以后台方式运行容器,该选项需要配合-i、-t选项一起使用,使用该选项后exit退出容器也不影响里面运行的程序

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

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

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

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

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

docker run --network:指定容器的网络,常用于容器跨主机通信

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

docker run --rename :修改容器名字

docker run --rm:当容器退出后会自动被删除掉,常用于进行容器测试或者云主机环境,需要短期且大量的Docker虚拟机工作,工作完成后自动销毁

docker run -d -it --rm --name web01 nginx  #后台启动了一个名为web01的nginx镜像
docker stop web01  #这个容器停止后就会被自动删除


docker run -p:将宿主机中指定的端口与Docker容器中的端口进行映射,可以实现将容器中的端口暴露到宿主机上的效果,方便宿主机访问。比如在容器中安装Nginx后需要把80端口映射到宿主机上,然后通过宿主机就可以访问到容器中的服务。使用netstat命令或者docker ps命令、docker port命令都可以查看到端口映射关系,使用iptables命令还可以看到自动创建好的转发规则

# 不写宿主机端口则是一个随机端口
docker run --name test_nginx --rm -p 80 nginx
# 指定宿主端口
docker run --name test_nginx --rm -p 8080:80 nginx
#宿主机端口为8000,网络接口为ALL
docker run --name test_nginx --rm -p 8000:80 -p 3306:3306 nginx
#指定了网络接口  
docker run --name test_nginx --rm -p 192.168.1.100:8000:80 nginx 
docker port nginx #查看nginx容器的端口映射关系


docker run  --restart:Docker容器的自启动,使用该选项后容器会跟随宿主机的启动而自我启动。该选项默认值是no,改为yes即可

docker run -itd --restart=yes  -name=centos_docker1 docker.io/ansible/centos7-ansible /bin/bash


docker run --link:会在hosts文件中为指定的容器做一个解析记录,常用于不同容器之间的互通,免去手动配置IP

docker run -it --link nginx:web nginx:lastert /bin/bash  #nginx为另一个容器的名字,web为这个容器的别名,ping web这个名字可以看到nginx这个容器的IP
#nginx容器和mysql、zabbix互通
docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix" \
      -e MYSQL_ROOT_PASSWORD="zabbix" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 8080:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest


2、查看容器运行情况

#下面两条命令等效,用于查看系统中正在运行的容器 
docker container ls -a  #加-a可以看到已经停止的容器
docker container ps -a


3、启动与停止容器

启动容器:docker container start

停止容器:docker container stop

重启容器:docker container restart

强制停止容器:docker container kill

docker container stop nginx
docker container restart nginx
docker container kill nginx
docker container stop `docker container ps -qa`  #批量停止容器


4、暂停容器

有时候需要暂停容器工作一段时间,比如进行快照、暂时释放宿主机资源,暂停的容器不消耗资源

docker pause centos:v1    #暂停指定的容器
docker unpause centos:v1  #恢复被暂停的指定容器


5、查看容器元信息

docker container port命令可以查看容器端口的映射信息;docker container inspect命令可以查看容器更详细的底层信息,如容器运行后默认执行什么命令(cmd)、每个容器的IP信息(这就是为什么能通过宿主机访问容器中服务的原因,在安装了Docker后网卡配置里多了一个docker0的网卡,之后建立的容器都是跟该网卡在一个网段内,默认是172.段)

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



6、登录容器

使用docker container attach、docker container exec两个命令都可以进入运行中的容器,attach是直接进入容器正在运行的命令中,不会启动新的进程。如果容器是在执行一个无限循环进行输出,那attach进入后则会看到这些输出信息。而exec是开启一个新的终端进入容器,之后可以对容器进行各种操作,并且执行exit退出容器时不会让容器停止运行


7、退出容器

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


8、删除容器

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


9、宿主与容器的文件复制

使用docker cp命令可以将文件进行互相复制

docker cp index.html 770fbbsagi:/usr/local/nginx/html/  #复制本地文件index.html到容器/usr/local/nginx/html/中


10、查看容器运行日志

使用docker logs -f可以查看容器的日志,类似于tailf命令

文章评论

猜你喜欢

Docker运维教程(1)Docker的基本概念与安装

运维技术 Docker运维教程(1)Docker的基本概念与安装

一、Docker简介Docker本身并不是容器,而是对容器进行了一种封装,是容器技术的一种简化实现方式。容器技术可以快速将不同版本的应用或者不同应用打包到容器中实现服务快速部署,减少环境不一致带来的问...