yitu浅谈Docker---镜像的生成与发布+容器的构建

Panther 从一位小白走来,虽然现在也还是小白,但是我取之于民,不定时将自己所学到的都分享给大家,这篇为大家分享2019/9/18上午整理的,由于最近一段时间忙着学习angularjs+kubernetes没有怎么发博客,这篇文章主要是讲解如何在centos下运行docker及docker的一些常用指令,下一篇文章会讲解如何搭建kubernetes集群
在上一篇博客中有讲到如何入搭建一个docker的容器,这里着重以视觉上的感官来分享

one
docker的架构和底层技术,docker platform平台
yitu浅谈Docker---镜像的生成与发布+容器的构建_第1张图片

  1. docker提供了一个开发、打包、运行app的平台
  2. 把app和底层的infrastrcture隔离开来
  3. docker engine有后台进程(dockerd) + REST API Server + CLI接口(docker)
  4. 启动虚拟机
#启动
vagrant up
#通过vagrant连接,在上一章节的网盘中有压缩包
vagrant ssh
  1. 通过命令可以查看client+server的版本
sudo docker version
  1. 如果出现查看不到server的情况,则需要启动docker
sudo systemctl start docker

yitu浅谈Docker---镜像的生成与发布+容器的构建_第2张图片
7. 查看后台dockerd的进程

ps -ef | grep docker

在这里插入图片描述

two
docker image镜像

  • image是文件和meta data的集合
  • docker的image是分层的,并且每一层都可以添加改变删除文件,成为一个新的image
  • 不同的image可以共享相同的layer
  • image本身是read-only的
  1. docker 查看本地已经有的image—(前提是通过 vagrant ssh连接上机器)
sudo docker image ls

在这里插入图片描述
2. image通过两种方式获取
a.docker提供了一种文件格式叫做dockerfile,通过这种格式我们可以定义image,通过这种格式的image我们又可以创建build
b.从registry拉取,拉取ubuntu:14.04 — (这里我们选择第二种)
yitu浅谈Docker---镜像的生成与发布+容器的构建_第3张图片
3. 再次查看本地image

sudo docker image ls

yitu浅谈Docker---镜像的生成与发布+容器的构建_第4张图片
4. docker hub是docker给我们提供的公开的免费的拉取image的工具
https://hub.docker.com
5. 可以下载官方的也可以下载私人的 私人的前面有自己的名称

docker pull ubuntu

three
制作base image;通过dockerfile 去 bulid 一个image,image可以变成一个container去执行,通过c语言写了一个小程序
yitu浅谈Docker---镜像的生成与发布+容器的构建_第5张图片

  1. 运行docker的命令行工具,需要输入sudo 配置之后可以不在需要输入,就是当输入指令不会报权限的错误;例如在不输入sudo ----- 只输入 docker images ls时不会报权限不够
    yitu浅谈Docker---镜像的生成与发布+容器的构建_第6张图片
  2. 添加group
sudo groupadd docker
#将当前用户添加到group里面
sudo gpasswd -a vagrant docker
#重启docker进程
sudo service docker restart
#重新登陆shell
exit
vagrant ssh
docker version

yitu浅谈Docker---镜像的生成与发布+容器的构建_第7张图片
现在再运行docker的任何命令就不需要sudo啦
3. 查看本地已经有的image镜像

sudo docker image ls
  1. 制作base的image
    a.通过dockerfile
    b.dockerhub拉取
    从头构建
    测试:从dockerhub上拉取hello-world image 也是一个base image
    docker pull hello-world
    在这里插入图片描述
  2. 执行hello-world这个container容器
docker run hello-world

yitu浅谈Docker---镜像的生成与发布+容器的构建_第8张图片
6. 通过c语言编写一个hello-world,编译成二进制的可执行文件

#创建一个目录
mkdir hello-world
#进入到该目录
ch hello-world
#在这个目录中创建一个c语言的hello-world程序
#查看是否安装vim显示只有一个
rpm -qa|grep vim

在这里插入图片描述
7. 安装其他相关的vim,安装成功再次查询

sudo yum -y install vim *

在这里插入图片描述
8. 编写c语言

vim hello.c

yitu浅谈Docker---镜像的生成与发布+容器的构建_第9张图片

#保存退出,esc
:wq
#编译成二进制文件
#编译成二进制的文件需要gcc,查看工具
history | grep yum
#添加gcc+glibc-static
sudo yum install gcc
sudo yum install glibc-static

yitu浅谈Docker---镜像的生成与发布+容器的构建_第10张图片
9. 执行编译命令

gcc -static hello.c -o hello
ls

yitu浅谈Docker---镜像的生成与发布+容器的构建_第11张图片
10. 执行hello这个可执行的文件

./hello

yitu浅谈Docker---镜像的生成与发布+容器的构建_第12张图片
11. 有了这个可执行文件之后,我们通过dockerfile将这个可执行文件打成image,在当前文件创建一个Dockerfile文件

vim Dockerfile

yitu浅谈Docker---镜像的生成与发布+容器的构建_第13张图片
yitu浅谈Docker---镜像的生成与发布+容器的构建_第14张图片
12. 现在就可以通过docker image ls,查看到刚刚创建的image

docker image ls

在这里插入图片描述
13. 查看hello文件的大小

ls -lh

yitu浅谈Docker---镜像的生成与发布+容器的构建_第15张图片
14. 查看image的分层

# docker history 加上image的id
docker history fa06a0fbb35d

在这里插入图片描述
15. 运行image

docker run xnr/hello-world

在这里插入图片描述

four
container容器

  • container是通过image创建的,先有image然后通过image创建container
  • container在image layer(它是只读的)之上建立的一个container layer它是可读可写的
  • 类比面向对象:类和实例
  • image负责app的存储和分发,container负责运行app
  1. 查看当前本地正在运行的容器
docker container ls

在这里插入图片描述

  1. 查看当前本地所有的容器,运行的 退出的
docker container ls -a

yitu浅谈Docker---镜像的生成与发布+容器的构建_第16张图片

  1. 查看所有的image
docker image ls

在这里插入图片描述
4. 下载centos的image,直接下载latest发行版

sudo docker pull centos

在这里插入图片描述
5. 运行发行版的centos,同样的运行完就结束了,不会常驻内存

docker run centos
  1. 交互式运行容器的一种方法
docker run -it centos

yitu浅谈Docker---镜像的生成与发布+容器的构建_第17张图片
7. 另外打开cmd ,进入查看

docker container ls
  1. container就是在image之上多了一个可写的层,例如创建一个文件
touch test.txt

yitu浅谈Docker---镜像的生成与发布+容器的构建_第18张图片
9. 可以使用yum这个命令,开始是没有vim的 只有vi,可以安装vim
yitu浅谈Docker---镜像的生成与发布+容器的构建_第19张图片
10. 这就是进入到container里面进行的一系列操作,接着退出

exit

yitu浅谈Docker---镜像的生成与发布+容器的构建_第20张图片
11. docker的基本命令

#通过docker 和 docker container都可以查看出他们对应的指令
docker
docker container
docker image
#先查看正在运行或者已经结束运行的容器
docker container ls -a
#简写查看命令
docker ps -a
#删除已经结束的container
docker container rm 容器的id(可以不用写全,区分出不同即可)
#简写rm
docker rm 容器的id
#批量删除container
#查询所有的container的id
docker container ls -aq
#删除
docker rm $(docker container ls -aq)
#再次查询,删除成功

yitu浅谈Docker---镜像的生成与发布+容器的构建_第21张图片
12. 当有在运行的容器和已经退出的容器,这个时候删除已经退出的容器,加个判断条件

docker rm $(docker container ls -f "status=exited" -q)

yitu浅谈Docker---镜像的生成与发布+容器的构建_第22张图片

#同理删除image
#查看image
docker images
#删除image
docker image rm 镜像id
#简写
docker rmi 镜像id

five
构建自己的docker镜像

  1. 基于某个image创建一个container
docker container commit
#简写
docker commit
  1. build 一个 base image
docker image build
#简写
docker build
  1. 查看image
docker image ls
  1. 交互运行centos,这样就有了一个docker container
docker run -it centos
  1. 在container做一些变化,安装vim
yum install -y vim
  1. 查看vim是否安装成功
    vim
  2. 退出
exit
  1. 查看容器是否在运行
docker container ls -a
  1. 通过命令将container转为image,通过commit
docker commit 容器的names的值 自定义的名称
docker commit dreamy_franklin xnr/centos-vim

yitu浅谈Docker---镜像的生成与发布+容器的构建_第23张图片

  1. 对比image镜像
docker history 镜像的id

yitu浅谈Docker---镜像的生成与发布+容器的构建_第24张图片
11. 这个方法不提倡,不安全的,删除他

#查看
docker image ls
#删除
docker image rm 

yitu浅谈Docker---镜像的生成与发布+容器的构建_第25张图片
12. 创建一个新的目录

mkdir docker-centos-vim
  1. 进入到该目录中
cd docker-centos-vim
  1. 创建Dockerfile
    vim Dockerfile
    在这里插入图片描述
  2. build 刚刚创建的Dcokerfile
docker build -t xnr/centos-vim-new .
#通过dockerfile来build一个与别人一样的image镜像
#查看dockerfile文件内容
more Dockerfile

在这里插入图片描述

six
镜像发布

  1. 发布自己的image,docker hub 是一个类似于github的一个网站,https://hub.docker.com
  2. 点击 repositories , 查看自己发布的image,如果没有发布就是空的
  3. 登陆自己的docker hub账户
    yitu浅谈Docker---镜像的生成与发布+容器的构建_第26张图片
  4. 发布的命令
docker image push
简写
docker push
  1. 发布
    yitu浅谈Docker---镜像的生成与发布+容器的构建_第27张图片
  2. 上图可能会出现问题—解析
#先列出所有镜像
docekr images
#将要要发布的镜像改到自己的账户名下,账户名pantherzy
docker tag xnr/hello-world pantherzy/xnr
#再次发布镜像
docker push pantherzy/xnr

yitu浅谈Docker---镜像的生成与发布+容器的构建_第28张图片
7. 发布成功
yitu浅谈Docker---镜像的生成与发布+容器的构建_第29张图片
8. (推荐)分享一个docker image里面可能存在一些病毒或者不安全的因素,不如直接分享产生docker image的Dockerfile
yitu浅谈Docker---镜像的生成与发布+容器的构建_第30张图片

你可能感兴趣的:(开源)