暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【Docker系列】镜像and容器基本操作

嘎嘎软件测试 2021-10-26
281

1 前言

上篇讲了我入门Docker的一个经历,以及Docker是什么和如何搭建Docker,那么这篇来讲讲Docker的镜像和容器一些基本操作。

带着“容器与镜像的关系类似于面向对象编程中的对象与类”去理解,相信对于初学者而言是非常好理解的。



2 镜像

1、镜像的基本操作
安装好Docker和Harbor之后,我们来练习一下登录Harbor,并且拉取镜像,和把本地镜像提交上去,这就和从github上面pull和push代码一个道理。
#1、docker login:登陆到Docker Hub
docker login -u 用户名 -p 密码


#docker logout:登出Docker Hub
docker logout


#2、docker pull:从Docker Hub下载java最新版镜像
docker pull java


#从Docker Hub下载REPOSITORY为java的所有镜像
docker pull -a java


#3、docker push:将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker push myapache:v1


#4、docker search:从Docker Hub查找镜像
#从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像
docker search -f stars=10 java


#5、docker images:列出本地镜像
#列出本地镜像中REPOSITORY为ubuntu的镜像列表
docker images ubuntu


#6、docker rmi:删除本地一个或多少镜像
docker rmi -f nginx:latest


#7、docker tag:标记本地镜像,将其归入某一仓库
docker tag redis:alpine redis:v1


#8、docker history:查看指定镜像的创建历史
docker history redis:alpine


#9、docker save:将指定镜像保存成tar归档文件。
docker save -o redis_latest.tar redis:alpine


#10、docker load:导入使用 docker save 命令导出的镜像。
docker load < redis_latest.tar


2、如何制作镜像
前面说到拉镜像,那么镜像又是如何制作的呢?以下有两种实现方式。

方式一:基于已有镜像创建
将已有镜像run一个实例,在这个实例修改内容后,commit为一个新镜像。
-a, --author="": 作者信息;
-c, --change=[]: 可以在提交的时候执行 Dockerfile 指令,如 CMD、ENTRYPOINT、ENV、EXPOSE、LABEL、ONBUILD、USER、VOLUME、WORIR 等;
-m, --message="": 提交信息;
-p, --pause=true: 提交时,暂停容器运行。


docker run -it registry.cn-qingdao.aliyuncs.com/metersphere/kafka:2 /bin/bash


docker container commit -m "new a image" -a "wmh" <容器Id> new_kafka:0.1


方式二:基于 Dockerfile 来创建镜像
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成映像。

Dockerfile的基础结构包括:#开头的表示注释行,说明dockerfile中的指令、维护者的信息、镜像操作指令、容器操作指令、基础镜像信息。

以下是一个简单Dockfile例子。
touch Dockerfile
vim Dockerfile,添加如下信息:


FROM centos:latest
LABEL version="1.0" maintainer="wmh"
RUN yum update && yum install -y python3


注意:命令的最后有个点,如果不加的话,会构建不成功
docker image build -t python:3 . 其中.表示在当前目录下搜索Dockerfile文件


3 容器

把镜像拉下来之后,运行起来的实例就叫容器,也可以理解为把一个项目跑起来,对这个实例我们可以重启、停止、删除等操作。
#1、docker run:启动容器
docker run -d \
--name mysql \
-p 3306:3306 \
-v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /usr/local/docker/mysql/data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7


#2、docker start <容器名称>:启动容器
docker start mysql


#3、docker stop <容器名称>:停止容器
docker stop mysql


#4、docker restart <容器名称>:重启容器
docker restart mysql


#5、docker kill <容器名称>:杀掉运行中的容器
docker kill -s KILL mysql


#6、docker rm :删除一个或多个容器rm -f <容器名称>
#强制删除容器 db01、db02:
docker rm -f db01 db02


#移除容器nginx01对容器db01的连接,连接名db:
docker rm -l db


#删除容器nginx01,并删除容器挂载的数据卷:
docker rm -v nginx01


#删除所有已经停止的容器(-q:只展示容器ID):
docker rm $(docker ps -a -q)


#7、docker pause/unpause:暂停/恢复容器
#暂停数据库容器db01提供服务:
docker pause db01


#恢复数据库容器db01提供服务:
docker unpause db01


#8、docker create:创建容器但是不启动
docker create --name demo01 nginx:latest


#9、docker exec:在运行的容器中执行命令 (查看容器ID:docker ps -a)
docker exec -it <容器ID> /bin/bash



4 总结

以上就是Docker的镜像和容器基本操作的总结啦,带着类比的思维去学习一门新技术,你就会发现万物相通,上手多操作几遍,就能实现入门了。

当然要实现熟练掌握,得在项目中实战才行,在项目来临之前 ,夯实基础才是硬道理。


您的点赞关注,是我们最大的动力~

喜欢的话,记得点“赞”“在看”                        

文章转载自嘎嘎软件测试,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论