Docker运维教程(2)Docker镜像与容器管理常用命令

TangLu 系统运维 2024-02-28 3368 0

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

从Docker分为CE版和EE版开始,命令行也发生了变化。CE版本中对命令进行了分组,并且支持命令补全,包括版本号都可以自动补全。使用docker --help命令可以看到Management Commands下包含了一些组,组名就是需要docker操作的对象,其下又包含了许多子命令。所以在新版本中运行命令的方式是"docker+对象名+子命令"的方式,而老版本中直接是“docker+子命令”。虽然为了兼容性支持以前的命令格式,但是推荐使用新的管理方式。

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


1、查看当前系统中的镜像

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

docker1.png


2、从镜像仓库中搜索镜像

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

docker search nginx

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


docker2.png


3、从镜像仓库中下载镜像

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

#命令格式
#docker pull [registry地址[:端口]/]镜像名:标签  #registry是仓库地址,默认为dockerhub;镜像名完整格式是<用户名>/<镜像名>,用户名不写的话默认使用官方镜像;镜像标签默认为latest
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


docker3.png


4、删除已下载的本地镜像

使用docker rmi或docker image rmi命令可以通过镜像名字或者ID来删除已下载的Docker镜像

docker rmi 688353a31fde


dockerimages.png


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 container ls -a  #加-a可以看到已经停止的容器
docker container ps -a  


2、运行容器相关命令

使用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


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、docker unpause

docker pause centos:v1 #pause后不暂用宿主机资源
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  #查看端口映射情况


docokerin.png


6、进入运行中的容器

使用docker container attach、docker container exec两个命令都可以进入运行中的容器,二者区别如下:

· attach:直接进入容器正在运行的命令中,不会启动新的进程。比如容器是在执行一个无限循环进行输出,那attach进入后则会看到这些输出信息。

· exec:开启一个新的终端进入容器,之后就对容器进行操作,并且执行exit退出容器时不会让容器停止运行

dockerattach.png


7、退出容器

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

dockerexit.png


8、删除Docker容器

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


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

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

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


10、查看容器运行日志

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

评论