Docker随笔,从基础到入门

实验环境:centos7.7
防火墙和selinux提前关闭

一、Docker基本概念

Docker系统有两个程序:
docker服务端和docker客户端。
docker服务端是一个服务进程,管理着所有的容器。
docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。
大部分情况下,docker服务端和客户端运行在一台机器上。

Docker采用C/S架构开发,整体架构如图所示:
在这里插入图片描述
Docker三大核心组件:
• Docker 镜像 - Docker images
• Docker 仓库 - Docker registeries
• Docker 容器 - Docker containers

Docker 镜像
Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用
UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆
盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个
Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重
新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,
只需要升级,层使得分发 Docker 镜像变得简单和快速。

在 Docker 的术语里,一个只读层被称为镜像,一个镜像是永久不会变的。
由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。 但是所有的变更都
发生顶层的可写层,而下层的原始的只读镜像文件并未变化。由于镜像不可写,所以镜像是无状态的。
每一个镜像都可能依赖于由一个或多个下层的组成的另一个镜像。我们说,下层那个镜像是上层镜像的父镜像。

基础镜像:
一个没有任何父镜像的镜像,谓之基础镜像。
基础镜像——>子镜像(实现独立的功能)

镜像ID:
所有镜像都是通过一个 64 位十六进制字符串 (内部是一个 256 bit 的值)来标识的。 为简化使用,前 12 个字
符可以组成一个短ID,可以在命令行中使用。短ID还是有一定的碰撞机率,所以服务器总是返回长ID。

Docker 仓库
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。
公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己
创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。

Docker 容器
Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器
都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立
和安全的应用平台,Docker 容器是 Docker 的运行部分。

Docker镜像命名解析
镜像是Docker最核心的技术之一,也是应用发布的标准格式。无论你是用docker pull image,或者是在
Dockerfile里面写FROM image,从Docker官方Registry下载镜像应该是Docker操作里面最频繁的动作之一了,那么docker镜像是如何命名的,这也是Docker里面比较容易令人混淆的一块概念:Registry,Repository, Tag and Image。

下面是本机运行docker images的输出结果:

[root@test247 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              84c5f6e03bf0        5 weeks ago         104MB
centos              latest              0d120b6ccaa8        2 months ago        215MB
hello-world         latest              bf756fb1ae65        9 months ago        13.3kB

我们常说的"centos"镜像其实并不是一个镜像名称,是代表了一个名为centos的Repository,同时在这个Repository下面有一系列打了tag的Image,Image的标记是一个GUID,为了方便也可以通Repository:tag来引用。

那么Registry又是什么呢?Registry存储镜像数据,并且提供拉取和上传镜像的功能。Registry中镜像是通过Repository来组织的,而每个Repository又包含了若干个Image。
• Registry包含一个或多个Repository
• Repository包含一个或多个Image
• Image用GUID表示,有一个或多个Tag与之关联

Image[:tag]
当一个镜像的名称不足以分辨这个镜像所代表的含义时,你可以通过tag将版本信息添加到run命令中,以执行特定版本的镜像。
例如:docker run centos:latest

给镜像打标签
#docker tag {imageid} centos:jdk1.8

容器名称
–name:为容器分配一个名字,如果没有指定,docker会自动分配一个随机名,是#docker run子命令的参数
可以通过三种方式为容器命名:
1)使用UUID长命名(“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”)
2)使用UUID短命令(“f78375b1c487”)
3)使用Name(“evil_ptolemy”)
如果你在执行docker run时没有指定–name,那么deamon会自动生成一个随机字符串UUID。
但是对于一个容器来说有个name会非常方便,当你需要连接其它容器时或者类似需要区分其它容器时,使用容器名称可以简化操作。无论容器运行在前台或者后台,这个名字都是有效的。

下面开始进行安装,以及使用docker的各种操作

二、安装

wget https://mirrors.aliyun.com/repo/epel-7.repo && curl -o /etc/yum.repos.d/ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 确保yum升级到最新
yum update

# 安装所需扩展包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 设置稳定存储库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装最新版本docker
yum install docker-ce docker-ce-cli containerd.io -y
systemctl start docker

#docker启动后会出现叫做"docker0"的桥接网卡
[root@test247 ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:22:d9:20:a1  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 修改docker镜像源
vi /etc/docker/daemon.json
修改为:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

重启docker:
systemctl daemon-reload 
systemctl restart docker

docker国内镜像地址:
https://registry.docker-cn.com    中国区官方
http://hub-mirror.c.163.com  //网易

三、镜像基本操作

1、查看docker命令帮助

docker --help
docker 命令 --help

2、查看docker版本

docker version //会显示服务端和客户端版本
或
docker -v

3、搜索docker镜像

#docker search 用于从 Docker Hub(https://hub.docker.com)中搜索指定的镜像,用法如下:
[root@test247 ~]# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6241                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              132                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   123                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   115                                     [OK]
centos/systemd                     systemd enabled base container.                 86                                      [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   83                                      
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              58                                      [OK]
centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   46                                      
tutum/centos                       Simple CentOS docker image with SSH access      46                                      
kinogmt/centos-ssh                 CentOS with SSH                                 29                                      [OK]

NAME           # 镜像仓库
DESCRIPTION    # 镜像描述信息
STARS          # 镜像收藏数
OFFICIAL       # 是否为docker官方发布的镜像
AUTOMATED  # 是否为自动化构建的镜像,关于自动化构建,可以查看官方文档:https://docs.docker.com/docker-hub/builds/#how-automated-builds-work

4、获取镜像

docker pull centos

5、列出本地镜像

[root@test247 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              84c5f6e03bf0        5 weeks ago         104MB
centos              latest              0d120b6ccaa8        2 months ago        215MB
hello-world         latest              bf756fb1ae65        9 months ago        13.3kB

6、删除一个镜像

#删除前确保没有容器运行再此镜像
docker -rmi centos:latest

7、查看镜像制作历史

[root@test247 ~]# docker history centos:latest
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
0d120b6ccaa8        2 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           2 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d…   215MB

四、容器基本操作

1、创建一个容器并运行

运行一个容器命名为 test1
docker run -t -i --name test1 docker.io/centos /bin/bash
-t /--tty: 指定操作终端
-i / -interactive:交互式连接(创建后直接打开容器)

# 开机自动运行
docker run -tid --restart=always --name test1 docker.io/centos /bin/bash
--restart=always : 设置容器开机自启,在创建容器的时候使用
--restart=no  :关闭开机自启
如果创建时没有设置,请用update
docker update --restart=always imagesName

# 出现无法连接外网的情况,开启本机ipv4转发
vim  /usr/lib/sysctl.d/00-system.conf

#添加下方代码:
net.ipv4.ip_forward=1

#重启network服务
systemctl restart network

2、退出容器

方法一:
快捷键:Ctrl+p+q   //该方式退出但不暂停容器

方法二:

容器内执行: exit  //该方式退出容器并关闭容器

3、显示容器信息(包含未运行的)

[root@test247 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b8481d34d34a        centos              "/bin/bash"         8 minutes ago       Up 7 minutes                            test1

CONTAINER ID :容器ID       
IMAGE        :使用的镜像  
COMMAND      :容器里面运行的命令
CREATED      :创建时间
STATUS       :容器的状态         
PORTS        :容器的端口映射         
NAMES        :容器的名字

# 单独某个容器的详细信息:
docker inspect b84    //b84是我机器上运行的一个容器ID的前3个字符

4、启动、重启、删除等命令

docker attach test1  //重新进入容器
docker start 容器名  //启动
docker stop  容器名  //停止
docker restart 容器名 //重启
docker rm 容器名      //先关闭容器再删除

5、容器数据持久化存储

mkdir /data
docker run -tid -v /data:/tmp/data --name c1 docker.io/centos /bin/bash
-v /data:/tmp/data    : 将本地/data挂载到容器的tmp目录下,将来容器在/tmp/data/目录内创建的文件就会持久化存储到本地/data目录中。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值