前言:
学习之前需要了解docker相关概念,移步 Docker官网
此处不再赘述虚拟化技术和docker VS 虚拟机 的一些内容,有条件的建议直接移步 度娘
笔记全程操作在华为云务器,CentOS7系统。需要自行准备操作环境。
容器、镜像、仓库
先回顾下容器、镜像、仓库的关系(上 官网 的图)
一. Docker镜像
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
接下来做一些Docker镜像的常用操作
1.1 镜像列表
# 列出本地主机上的镜像
docker images
各个参数说明:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签, 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
1.2 查找镜像
# 使用 docker search 镜像名 来搜索镜像,以mysql为例
docker search mysql
各参数说明:
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像的描述
- OFFICIAL: 是否 docker 官方发布
- STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
- AUTOMATED: 自动构建。
1.3 拉取镜像
# 使用 docker pull 镜像名 来搜索镜像,以mysql为例
docker pull mysql:5.7
这儿因为已经下载过5.7版本的镜像,所以会显示一部分 Already exists,忽略即可。
查看镜像库,发现mysql 5.7 的镜像拉取成功
1.4 删除镜像
# 删除单个镜像
# -f 表示强制删除
docker rmi -f 镜像ID
# 删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG
# 删除全部镜像
docker rmi -f $(docker images -qa)
此处删除我们拉取的 hello-world 镜像
1.5 提交镜像
# docker commit 提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
案例:ubuntu安装vim
apt-get update
apt-get -y install vim
docker commit -m="vim cmd add ok" -a="fuzj" 57d493c3314b demo/myubuntu:1.3
根据ubuntu创建一个addvimubuntu容器,安装,然后提交
[root@local ~]# docker run -it --name=addvimubuntu ubuntu bash
root@14f2f65ed04f:/# vim a.txt
bash: vim: command not found
root@14f2f65ed04f:/# apt-get update
...
root@14f2f65ed04f:/# apt-get -y install vim
...
root@14f2f65ed04f:/# vim a.txt
root@14f2f65ed04f:/# cat a.txt
ubuntu add vim success!
# ctrl + p + q 先暂时退出容器
[root@local ~]# docker commit -m="vim cmd add ok" -a="fuzj" 14f2f65ed04f demo/newubuntu:2.0
然后 docker images 查看镜像,可以看到会产生一个名为 demo/newubuntu:2.0的镜像源,并且比原有的ubuntu镜像大了一些...
二. Docker容器
2.1 新建容器
# 格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:有些是一个减号,有些是两个减号
--name="容器的新名字" => 为容器指定一个名称
-d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行)
-i: 以交互模式运行容器,通常与-t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
也即启动交互式容器(前台有伪终端,等待交互);
-P:随机端口映射,大写P
-p:指定端口映射,小写p
两种创建方式:
2.1.1 交互式容器创建
# 此命令交互式启动了一个ubuntu容器,在容器内执行/bin/bash命令,退出终端,直接exit退出
docker run -it ubuntu /bin/bash
# 此命令交互式启动了一个ubuntu容器,指定容器名称
docker run -it --name=myu1 ubuntu /bin/bash
2.1.2 守护式容器创建
守护式容器(daemonized container):创建长期运行的容器。没有交互式会话,适合运行应用程序和服务,大多数时候是需要以守护式来运行容器。
# 前台交互式启动
docker run -it redis:6.0.8
# 后台守互式启动
docker run -d redis:6.0.8
2.2 查看容器
# 罗列当前运行中的容器
docker ps
-a:列出当前所有正在运行的容器和历史上运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
2.3 退出容器
exit: run进去容器,exit退出,容器停止
ctrl+p+q: run进去容器,ctrl+p+q退出,容器不停止
2.4 启动/重启容器
# 启动已经停止运行的容器
docker start 容器ID或者容器名
# 重启容器
docker restart 容器ID或容器名
2.5 进入容器
#进入正在运行的容器并以命令行交互
docker exec -it 容器ID /bin/bash
docker attach 容器ID
#区别:
attach 直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器的停止。
exec 是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止(建议使用)
2.6 停止容器
# 停止容器
docker stop 容器ID或容器名
# 强制停止容器
docker kill 容器ID或容器名
2.7 删除容器
# 删除已停止的容器
docker rm 容器ID
docker rm -f 容器ID 强制删除
docker rm -f $(docker ps -a -q) -> 一次性删除多个容器实例
docker ps -a -q | xargs docker rm -> 一次性删除多个容器实例
# 清理停止的容器
docker container prune
2.8 容器拷贝文件
# 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
2.9 导入和导出容器
# 容器导入操作
docker export 容器ID > 文件名.tar
# 容器导入操作
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
2.10 容器的其他操作
# 查看容器内运行的进程
docker top 容器ID
# 查看容器内部细节
docker inspect 容器ID
# 查看容器日志
docker logs 容器ID
# 实时查看docker容器名为user-uat的最后10行日志
docker logs -f -t --tail 10 user-uat
# 查看指定时间后的日志,只显示最后100行
docker logs -f -t --since="2018-02-08" --tail=100 user-uat
# 查看最近30分钟的日志
docker logs --since 30m user-uat
# 查看某时间之后的日志
docker logs -t --since="2018-02-08T13:23:37" user-uat
# 查看某时间段日志
docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" user-uat
# 将错误日志写入文件
docker logs -f -t --since="2018-02-18" user-uat | grep error >> logs_error.txt
三. Docker仓库
仓库(Repository)是集中存放镜像的地方,它和我们的Maven仓库是一样的。以下操作 Docker Hub。
3.1 下载镜像
# 下载镜像docker registry
docker pull registry
3.2 运行私有库
# 运行私有库Registry,相当于本地有个私有的docker hub
docker run -d -p 5000:5000 -v /myregistry/:/tmp/registry --privileged=true registry
3.3 创建新镜像
# 演示创建一个新镜像,ubuntu安装ifconfig命令
apt-get update
apt-get install net-tools
...
进去容器一通安装就行了..参考上面
# commit 新的镜像
docker commit -m="vim cmd add ok" -a="fuzj" 7966987e4a42 addubuntu:3.0
3.4 查看私服镜像
# curl验证私服上有什么镜像
curl -XGET http://121.36.54.248:5000/v2/_catalog
此时查看结果为空
3.5 规范镜像
# 将新镜像 fzjmyubuntu:1.2 修改符合私服规范的Tag
docker tag addubuntu:3.0 121.36.54.248:5000/addubuntu:3.0
3.6 修改配置文件
修改配置文件使支持http
vim /etc/docker/daemon.json
添加
"insecure-registries":["[IP]:5000"]
3.7 镜像推送
# push推送到私服库
docker push 121.36.54.248:5000/addubuntu:3.0
3.8 验证私服镜像
curl -XGET http://121.36.54.248:5000/v2/_catalog
3.8 测试私服镜像拉取
# pull到本地并运行
docker pull 121.36.54.248:5000/fzjmyubuntu:1.2
撒花撒花~~~
今天的一言难尽,热乎的笔记,边做边写边截图...
家人们,谁懂啊,还是得多练习啊,一不小心就是一个坑啊...
做笔记,多练习,知其然也要知其所以然。加油,共勉!