Docker基本管理:上篇(Docker理论概述和基础命令)


Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

在这里插入图片描述

Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1、快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

2、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

一、Docker 架构

Docker 包括三个基本概念:

●镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

●容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

●仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

在这里插入图片描述

1.1:容器与虚拟机的区别

在这里插入图片描述

二、docker安装:

1.安装依赖包

[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
yum-utils 提供了yum-config-manager

●Device mapper:存储驱动程序需要device-mapper-persistent-data lvm2

●Device mapper是Liunx2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构

2.设置阿里云镜像资源,下载一个docker-ce

[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装docker-ce,并启动

[root@localhost ~]# yum -y install docker-ce
[root@localhost ~]# systemctl start docker.service    ##开启docker

4.配置镜像加速,用浏览器打开阿里云官网
在这里插入图片描述

5.回到虚拟机在/etc目录下配置镜像加速,并重新加载

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

6.镜像加速
使用刚才在阿里云官网的加速,每个人都有不同的

7.配置网络优化

[root@localhost docker]# vim /etc/sysctl.conf   ##开启路由功能
net.ipv4.ip_forward=1       ##底行加入
[root@localhost docker]# sysctl -p    
net.ipv4.ip_forward = 1
[root@localhost docker]# service network restart    ##重启网络功能
[root@localhost docker]# systemctl restart docker    ##重启服务

到此docker就安装完成了

2.1:镜像基础命令操作

查看版本

[root@localhost docker]# docker version 
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false
省略....

搜索nginx镜像

[root@localhost docker]# docker search nginx
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        13757               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1876                                    [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   787                                     [OK]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   128                                     

下载nginx镜像

[root@docker ~]# docker pull nginx
在下载的时候是分成若干个部分进行下载的,AUFS(联合文件系统)
Using default tag: latest
latest: Pulling from library/nginx
d121f8d1c412: Pull complete 
ebd81fc8c071: Pull complete 
655316c160af: Pull complete 
d15953c0e0f8: Pull complete 
2ee525c5c3cc: Pull complete 
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
下载后存放在/var/lib/docker中

查看下载的镜像列表

[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
其中TAG为标签,在准备私有仓库的时候有用,ID为镜像id号

查看镜像信息

[root@docker ~]# docker inspect 7e4d58f0e5f3(ID号)或者
[root@localhost ~]# docker inspect nginx:latest

添加新标签
复制了一份,只是标签不同

[root@localhost ~]# docker tag nginx:latest nginx:web
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
nginx               web                 7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago         1.23MB

删除镜像
删除镜像可以使用标签,也可以使用ID,在使用ID的时候,如果有多个标签不同的相同镜像,则无法删除,关于镜像删除,只要镜像在容器中就不可以被删除,不管容器是运行还是停止状态

[root@docker ~]# docker rmi nginx:latest
Untagged: nginx:latest
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               web                 7e4d58f0e5f3        8 days ago          133MB
[root@docker ~]# docker pull nginx
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        8 days ago          133MB
nginx               web                 7e4d58f0e5f3        8 days ago          133MB
使用ID删除时报错
[root@docker ~]# docker rmi 7e4d58f0e5f3
Error response from daemon: conflict: unable to delete 7e4d58f0e5f3 (must be forced) - image is referenced in multiple repositories

存出镜像
存出镜像nginx:latest到当前目录下名为nginx

[root@localhost ~]# docker save -o /opt/nginx nginx:latest 
[root@localhost ~]# ls /opt
containerd  nginx  rh
[root@localhost ~]# ll -h /opt
总用量 131M
drwx--x--x. 4 root root   28 920 12:23 containerd
-rw-------. 1 root root 131M 920 13:32 nginx
drwxr-xr-x. 2 root root    6 1031 2018 rh

载入镜像

[root@localhost ~]# docker load < /opt/nginx 
07cab4339852: Loading layer  72.49MB/72.49MB
f431d0917d41: Loading layer  64.31MB/64.31MB
60c688e8765e: Loading layer  3.072kB/3.072kB
eabfa4cd2d12: Loading layer  4.096kB/4.096kB
908cf8238301: Loading layer  3.584kB/3.584kB
Loaded image: nginx:latest
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        9 days ago          133MB
busybox             latest              6858809bf669        11 days ago        

三、Docker基础操作

创建容器

[root@localhost ~]# docker create -it nginx:latest /bin/bash
eecc6eff0159101940b2029d83877227af216e4319496d5278e5fe9154e59095

查看容器状态

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
eecc6eff0159        nginx:latest        "/docker-entrypoint.…"   9 seconds ago       Created                                 sleepy_rhodes

启动容器

[root@localhost ~]# docker start eecc6eff0159
eecc6eff0159
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
eecc6eff0159        nginx:latest        "/docker-entrypoint.…"   About a minute ago   Up 2 seconds        80/tcp              sleepy_rhodes

查看网卡信息

●在创建容器之后会有一个docker0的网卡,供docker连接

[root@localhost ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:7eff:fe0b:9c27  prefixlen 64  scopeid 0x20<link>
        ether 02:42:7e:0b:9c:27  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13  bytes 1784 (1.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在上面的操作中,启动容器的步骤有三个,下载镜像->创建容器->开启容器

[root@docker ~]# docker search centos7
paigeeworld/centos7
   
[root@docker ~]# dcoker pull paigeeworld/centos7
[root@docker ~]# docker create -it paigeeworld/centos7 /bin/bash
[root@docker ~]# docker start 44d19a107964

使用run命令可涵盖这三个步骤

-c 后跟指令查看根目录

[root@localhost ~]# docker run centos:7 /bin/bash -c ls /
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

查看状态,可看到状态为退出,执行完任务后就自动退出了,释放了资源

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
673259bb2525        centos:7            "/bin/bash -c ls /"      32 seconds ago      Exited (0) 31 seconds ago                       cranky_northcutt

如果希望一直在后台运行的话
run -d表示在后台运行并打印ID号,

[root@localhost ~]# docker run  -d centos:7 /bin/bash -c "while true;do echo hello;done"
b6a6d7681d0dbeca81916d43ea2b6bb56cb221e7707e78b010d1c13f25c3368c
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
b6a6d7681d0d        centos:7            "/bin/bash -c 'while…"   10 seconds ago      Up 9 seconds                                    angry_rhodes

终止镜像运行

[root@localhost ~]# docker stop b6a6d7681d0d 
b6a6d7681d0d
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
b6a6d7681d0d        centos:7            "/bin/bash -c 'while…"   2 minutes ago       Exited (137) 4 seconds ago                       angry_rhodes

进入容器

[root@localhost ~]# docker ps -a           容器一定要是up状态
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
f9ad5d33ae4f        centos:7            "/bin/bash"              26 seconds ago      Up 1 second                                      boring_hoover
b6a6d7681d0d        centos:7            "/bin/bash -c 'while…"   4 minutes ago       Exited (137) 2 minutes ago                       angry_rhodes
673259bb2525        centos:7            "/bin/bash -c ls /"      8 minutes ago       Exited (0) 8 minutes ago                         cranky_northcutt
b89b7044bbd6        nginx:latest        "/docker-entrypoint.…"   49 minutes ago      Exited (0) 20 minutes ago                        fervent_ritchie
[root@localhost ~]# docker exec -it f9ad5d33ae4f  /bin/bash       
[root@f9ad5d33ae4f /]# 
[root@f9ad5d33ae4f /]# exit
exit
[root@localhost ~]# 
exit退出

容器导出

[root@localhost ~]# docker export b89b7044bbd6 > /opt/nginx_c
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
containerd  nginx  nginx_c  rh

容器导入(会生成镜像,而不会创建容器)

[root@localhost opt]# cat nginx_c |docker import - nginx:abc
sha256:cad91aaab6a8ebc3ff50e52f181df8283ccd151b95cb4fa84ea209e61755e0c4
[root@localhost opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               abc                 cad91aaab6a8        16 seconds ago      131MB
nginx               latest              7e4d58f0e5f3        10 days ago         133MB
busybox             latest              6858809bf669        12 days ago         1.23MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB

删除容器
删除容器不能删除正在运行的容器,要先终止运行stop

[root@docker ~]# docker rm a3d5f5a4247a 

批量删除容器

[root@localhost opt]# docker ps -a | awk '{print "docker rm "$1}' | bash
Error: No such container: CONTAINER
Error response from daemon: You cannot remove a running container f9ad5d33ae4f9bf2f7bd72cb55af9856084c3455e7facf550e7e58072bef977f. Stop the container before attempting removal or force remove
b6a6d7681d0d
673259bb2525
b89b7044bbd6
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f9ad5d33ae4f        centos:7            "/bin/bash"         31 minutes ago      Up 31 minutes                           boring_hoover
删除了stop状态的容器,up状态的不能被删除
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值