Docker基本管理

随着计算机近几十年的蓬勃发展,产生了大量优秀系统和软件。软件开发人员可以自由选择名种软件应用。但同时带来的问题就是需要维护一个非常庞大的开发、测试和生产环境。 面对这种情况,Docker 容器技术横空出世,提供了简单、灵活、高效的解决方案,不需要过多地改变现有的使用习惯,就可以和已有的工具,如 OpenStack 等配合使用。因此,掌握 Docker 相关技术也是途经云计算的必经之路。

本章将依次介绍 Docker 的三大核心概念--镜像、容器、仓库,以及安装 Docker 与介绍围绕镜像和容器的具体操作。

一、Docker概述

因为 Docker 轻便、快速的特性,可以使应用达到快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若于个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式,在开发环境中能够快速提高工作效率。

Docker 容器能够帮助开发人员、系统管理员、质量管理和版本控制工程师在一个生产环节中一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。

1.1什么是Docker

  • 是一种轻量级的"虚拟机"
  • 在Linux容器里运行应用的开源工具

如果要方便的创建运行在云平台上的应用,必须要脱离底层的硬件,同时还需要任何时 间地点可获取这些资源,这正是 Docker 所能提供的。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大的提高了工作效率。

1.2Docker的优势

Docker 容器运行速度很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;Docker 核心解决的问题是利用容器来实现类似虚拟机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。因此,Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,在保证应用性能的同时,又减小了系统开销,使得一台主机上同时运行数千个 Docker 容器成为可能。Docker 操作方便,可以通过 Dockerfile 配置文件支持灵活的自动化创建和部署。表 1-1将 Docker容器技术与传统虚拟机的特性进行了比较。

Docker之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层,而 Docker 容器则是直接在操作系统层面之上实现的虚拟化。图 1.2 是 Docker 与传统虚拟机架构。

1.3镜像

镜像、容器、仓库是 Docker 的三大核心概念。其中 Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。例如:一个镜像可以是一个完整的 Cent OS 操作系统环境,称为一个 CentOS 镜像;也可以是一个安装了 MSQL 的应用程序,称之为一个 MySQL 镜像等等。

Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经创建好的镜像直接使用。

1.4容器

Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证安全性的平台。可以将容器看作是一个简易版的 Linux 环境,Docker 利用容器来运行和隔离应用。

1.5仓库

Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用 push 命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。

仓库注册服务器(Registry)是存放仓库的地方,其中包含了多个仓库。每个仓库集中存放某一类镜像,并且使用不同的标签(tag)来区分它们。目前最大的公共仓库是docker Hub,存放了数量庞大的镜像供用户下载使用。

二、安装 Docker

Docker 支持在主流的操作系统平台上进行使用,包括 Windows 系统、Linux 系统、以及 MacOS 系统等。目前最新的 RHEL、Cent OS 以及 Ubuntu 系统官方软件源中都已经默认自带了Docker 包,可直接安装使用,也可以用 Docker 自己的 YUM 源进行配置。

Cent OS 系统下安装 Docker 可以有两种方式:一种是使用 CURL 获得 Docker 的安装脚本进行安装,另一种是使用 YUM 仓库来安装 Docker。

注意:目前 Docker 只能支持 64 位系统。

2.1安装最新版本Docker依赖版本环境

#本安装方式使用阿里的软件仓库
#Step1: 添加软件源信息
yum -y install wget
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache

#Step2: 使用本地yum源安装必要的一些系统工具
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config 
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#Step 3: 安装Docker-CE
 yum clean all
 yum makecache fast
 yum repolist
 yum -y install docker-ce

##Step 4:添加国内镜像站
mkdir /etc/docker/
cat>/etc/docker/daemon.json<<EOF
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF

备注:

也可以将国内的镜像站改为阿里镜像加速器,Docker镜像加速地址可以在阿里上申请

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

#Step 5: 开启Docker服务
systemctl restart docker
systemctl enable docker
docker version

cat>> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl -p

三、Docker镜像操作

1.搜索镜像

[root@localhost ~]# docker search lamp

2.获取镜像

注意:可选择星级较高的镜像

[root@localhost ~]# docker pull mattrayner/lamp

3.查看镜像信息

[root@localhost ~]# docker images

查看镜像的详细信息

[root@localhost ~]# docker inspect c15

修改镜像标签(老名字+新名字)

[root@localhost ~]# docker tag mattrayner/lamp lamp:lamp
[root@localhost ~]# docker images

注意:

修改标签时可以只设置新的镜像名称,不要标签TAG,此时的标签会使用默认的latest当做标签名

4.删除镜像

用镜像名删除

[root@localhost ~]# docker rmi lamp:lamp

注意:如果标签名为latest,删除时只用镜像名即刻

用ID删除

[root@localhost ~]# docker rmi c15

注意:

用ID删除时,不能有同ID的镜像,比如修改镜像标签而生成的新的镜像,该镜像的ID和原始镜像是相同的,此时不能用ID删除。

5.存出镜像和载入镜像

[root@localhost ~]# docker save -o lamp mattrayner/lamp
[root@localhost ~]# docker rmi mattrayner/lamp
[root@localhost ~]# docker load<lamp 

6.上传镜像

[root@localhost ~]# docker tag mattrayner/lamp 58wangjunqing/lamp:lamp

注意:

要想将自己的镜像上传到Docker,需要修改镜像名字,名字的前缀要使用Docker账号

[root@localhost ~]# docker login
输入账号和密码后即可登录成功

[root@localhost ~]# docker push 58wangjunqing/lamp:lamp

[root@localhost ~]# docker search 58wangjunqing

备注:注册Docker账号,登录网址https://hub.docker.com/

四、Docker容器操作

1.容器的创建与启动

[root@localhost ~]# docker create -it mattrayner/lamp /bin/bash

注意:

-i:让容器的输入保持打开状态

-t:让Docker分配一个伪终端

-d:以守护进程的方式运行该容器

此命令只是把容器创建了出来,并没有运行

[root@localhost ~]# docker ps -a

2.容器的运行

[root@localhost ~]# docker start 5a

在创建容器时直接启动容器
[root@localhost ~]# docker run centos:7 /usr/bin/bash -c "ls /root"
注意:此命令只是用该容器执行了一下ls命令,随后此容器就关闭了

在启动容器时持续在后台运行
[root@localhost ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
或
[root@localhost ~]# docker run -dit centos:7 /bin/bash 

3.容器的终止

[root@localhost ~]# docker stop b18

4.进入容器

[root@localhost ~]# docker exec -it 03f /bin/bash

退出

[root@03f062851c52 /]# exit

5.容器导出

[root@localhost ~]# docker export 03f >centos7

6.容器导入生成镜像

[root@localhost ~]# docker import centos7 centos7:test
[root@localhost ~]# docker images

7.容器删除

[root@localhost ~]# docker rm 7f

删除所有容器

docker rm -f $(docker ps -a | awk '{print $1}')

8.端口映射

[root@consul ~]# docker pull httpd 
(1)随机映射端口
[root@consul ~]# docker run -d -P httpd
[root@consul ~]# docker ps -a
(2)指定映射端口
[root@consul ~]# docker run -d -p 49280:80 httpd
[root@ consul ~]# docker ps -a

备注:

49280:是映射到外部的端口,这个端口范围通常是从32768到61000

80:是容器的端口

备注:

在开启防火墙的情况下,创建容器时如果指定了端口映射,转发规则会自动的添加到docker主机的防火墙策略中,这样,外部主机就可以通过docker主机的ip地址+容器对外映射的端口访问容器的服务,这样就保证了docker主机的安全性

如果要关闭防火墙,会提示无法创建iptables策略,重启一下docker进程即可

9.容器互联

(1)创建源容器
[root@consul ~]# docker run -dit --name web01 centos:7
(2)创建接收容器
[root@consul ~]# docker run -dit --name web02 --link web01:web01 centos:7

备注:

--link web1:web1

冒号前的web1,是第一个需要链接的容器的名字

冒号后的web1,是链接到第二个容器后,为第一个容器起的别名

(3)测试容器互联
[root@consul ~]# docker exec -it web02 /bin/bash
[root@71591dd4a58e /]# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	web01 36411a49ce54
172.17.0.3	71591dd4a58e
[root@71591dd4a58e /]# ping web01

五、Docker的数据管理

1.什么是数据卷

Docker 提供的一种持久化数据存储解决方案,用于在容器之间共享和持久化数据。数据卷解决了容器中数据易失性的问题,使得容器可以更加灵活和可移植。

2.创建数据卷

[root@localhost ~]# docker run -dit -v /data1 -v /data2 --name web03 centos:7
 
[root@localhost ~]# docker  exec -it web03 /bin/bash
[root@9a398d3ec1f3 /]# cd /data1
[root@9a398d3ec1f3 data1]# cd /data2

3.数据卷容器

[root@localhost ~]# docker run -dit --volumes-from web03 --name db1 centos:7 /bin/bash

4.挂载主机目录作为数据卷

案例1

[root@localhost ~]# docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web04 httpd
[root@localhost ~]# echo "ni hao">/data1/index.html
[root@localhost ~]# curl 192.168.10.101:8080

案例2

[root@localhost ~]# mkdir -p /www/{conf,html}
将编辑好的nginx配置文件拷贝到/www/conf
将网站代码拷贝到/www/html
[root@localhost ~]# docker run -dit -p 9090:80 -v /www/conf/nginx.conf:/etc/nginx/nginx.conf -v /www/html:/www/html --name web05 nginx /bin/bash -c "nginx"
 
[root@localhost conf]# docker run -d -p 9090:80 -v /www/conf/default.conf:/etc/nginx/conf.d/default.conf -v /www/html:/usr/share/nginx/html -v/www/nginx/log:/var/log/nginx --name web05 nginx
相关推荐
桂月二二3 小时前
Java与容器化:如何使用Docker和Kubernetes优化Java应用的部署
java·docker·kubernetes
007php0074 小时前
linux服务器上CentOS的yum和Ubuntu包管理工具apt区别与使用实战
linux·运维·服务器·ubuntu·centos·php·ai编程
人类群星闪耀时4 小时前
深度学习在灾难恢复中的作用:智能运维的新时代
运维·人工智能·深度学习
djykkkkkk5 小时前
ubuntu编译遇到的问题
linux·运维·ubuntu
LinkTime_Cloud5 小时前
GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily
大数据·运维·gitlab
qq_429856575 小时前
linux 查看服务是否开机自启动
linux·运维·服务器
Smile丶凉轩6 小时前
Docker核心技术和实现原理
运维·docker·容器
清风细雨_林木木6 小时前
Docker使用——国内Docker的安装办法
运维·docker·容器
运维&陈同学6 小时前
【Kibana01】企业级日志分析系统ELK之Kibana的安装与介绍
运维·后端·elk·elasticsearch·云原生·自动化·kibana·日志收集
dessler7 小时前
Docker-Dockerfile讲解(三)
linux·运维·docker