上篇讲了我入门Docker的一个经历,以及Docker是什么和如何搭建Docker,那么这篇来讲讲Docker的镜像和容器一些基本操作。
带着“容器与镜像的关系类似于面向对象编程中的对象与类”去理解,相信对于初学者而言是非常好理解的。
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.tar2、如何制作镜像
前面说到拉镜像,那么镜像又是如何制作的呢?以下有两种实现方式。
方式一:基于已有镜像创建
将已有镜像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文件把镜像拉下来之后,运行起来的实例就叫容器,也可以理解为把一个项目跑起来,对这个实例我们可以重启、停止、删除等操作。
#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以上就是Docker的镜像和容器基本操作的总结啦,带着类比的思维去学习一门新技术,你就会发现万物相通,上手多操作几遍,就能实现入门了。
当然要实现熟练掌握,得在项目中实战才行,在项目来临之前 ,夯实基础才是硬道理。