Docker(二)容器、镜像、仓库


前言:

        学习之前需要了解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

撒花撒花~~~


 今天的一言难尽,热乎的笔记,边做边写边截图...       

        家人们,谁懂啊,还是得多练习啊,一不小心就是一个坑啊...

        做笔记,多练习,知其然也要知其所以然。加油,共勉!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码云说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值