DOCKER之入门篇

本文介绍了Docker的基本概念、安装步骤、关键命令、镜像与容器的区别,涵盖服务部署(如Tomcat、Mysql、Nginx和Redis)、镜像恢复与迁移、DockerFile的使用以及私有仓库的搭建与操作。
摘要由CSDN通过智能技术生成

DOCKER之入门篇

1. 概述

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

1.1优点

  • 一致的运行环境
  • 更快速的启动时间
  • 隔离性
  • 弹性伸缩,快速扩展
  • 迁移方便
  • 持续交付和部署

Docker应用场景

① Web 应用的自动化打包和发布

② 自动化测试和持续集成、发布

③ 在服务型环境中部署和调整数据库或其他的后台应用

使用Docker可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性。


1.2组件

名称说明
Docker镜像(Images)Docker镜像是用于创建Docker容器的模板.镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。
Docker容器(Container)容器是独立运行的一个或者一组应用,镜像相当于类,容器相当于类的实例
Docker客户端(Client)Docker客户端通过命令行或者其他工具使用Docker API与Docker的守护进程通信。
Docker主机(Host)一个物理或者虚拟的机器用于执行Docker守护进程和容器。
Docker守护进程是Docker服务器端进程,负责支撑Docker容器的运行以及镜像的管理。
Docker仓库DockerHub
(Ravictrvl
Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub提供了庞大的镜像集合供使用。用户也可以将自己本地的镜像推送到Docke沧库供其他人下载。

1.3 Docker镜像与容器

镜像:类似虚拟机镜像 , 是一个特殊的文件系统

操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器:类似linux系统环境,运行和隔离应用。是镜像运行时的实体

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

仓库:集中存放镜像文件的地方。

镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中存储、分发镜像的地方,比如后面我们要学的,Docker Registry就是这样的服务。


1.4 与虚拟机的区别

  • 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
  • 传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox和VMWare等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。
  • Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。
  • 简单来说:Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。

2.安装

2.1 安装Docker

按照官网 https://docs.docker.com/engine/install/centos/执行命令即可,https://linuxize.com/post/how-to-install-and-use-docker-on-centos-7/

#1.yum检查更新
sudo yum check-update
#2.删除旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#3.安装gcc环境
yum -y install gcc
yum -y install gcc-c++
#4.安装依赖项
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#5.将 Docker 存储库添加到 CentOS
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#或者使用阿里服务器下载
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#如果没有执行命令1更新,那么此时执行命令即可
yum makecache fast
#6.下载docker
sudo yum install -y docker #注意这样下载需要接受GPG秘钥,相当于一个数字指纹,指纹格式:060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
#或者社区版本
yum -y install docker-ce
#7.检查版本
docker version
#或者
docker -v

2.2 配置镜像加速

在阿里云镜像加速器中选择centos,执行操作文档的命令即可

如果想分布操作的话:

mkdir -p /etc/docker
vim  /etc/docker/daemon.json 

编辑mkdir -p /etc/docker文件,输入如下

//阿里云镜像
{
"registry-mirrors": ["https://8y2y8njn.mirror.aliyuncs.com"]
}
//utsc镜像
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
//网易镜像
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

再执行

systemctl daemon-reload
systemctl restart docker

即可

2.3 卸载docker

systemctl stop docker 
yum -y remove docker-ce
rm -rf /var/lib/docker
#卸载旧版本
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

3.命令

3.1 命令介绍

命令概述
cp本地文件系统(OS操作系统|宿主机)和容器之间进行文件或者文件夹拷贝
exec登录一个容器,使用命令行操作正在运行的容器。
images镜像的集合查询。
ps容器列表
pull下载镜像
restart重启一个或多个容器
rm删除一个或多个容器
rmi删除一个或多个镜像
run创建一个容器,并运行起来
save导出镜像到一个文件(tar)中
search搜索镜像(从Docker Hub)
start启动一个或多个已经停止的容器
stop停止一个或多个正在运行的容器

3.2 Docker的启动与停止

命令概述
systemctl start docker启动docker
systemctl stop docker停止docker
systemctl restart docker重启docker
systemctl status docker查看docker状态
systemctl enable docker开机启动
docker info查看docker概要信息
docker --help查看docker帮助文档

3.3 镜像相关命令

命令概述
docker images查看镜像
docker search 镜像名称查找镜像
docker pull 镜像名称【名称:版本号】拉取镜像
docker rmi ImageID/镜像名称删除镜像
docker rmi -f ImageID/镜像名称强制删除镜像
docker images -q查找所有镜像的ImageID
docker rmi docker images -q 删除所有镜像
  • REPOSITORY:镜像名称

  • TAG:镜像标签

  • IMAGE ID:镜像ID

  • CREATED:镜像的创建日期(不是获取该镜像的日期)

  • SIZE:镜像大小

#docker Image地址
/var/lib/docker/image/overlay2/imagedb/content/sha256

3.4 容器相关命令

1. 查看、创建
命令概述
docker ps查看正在运行的容器
docker ps -a查看所有容器,包括未运行的
docker ps –l查看最后一次运行的容器
docker ps -f status=exited查看停止的容器
docker load -i xx.tar加载相应的tar包
docker run创建容器
docker run -it --name=c1 centos:7 /bin/bash交互式方式创建容器
docker run -id --name=c2 centos:7守护式方式创建容器
docker exec -it c2 /bin/bash进入守护式容器方式

docker run参数说明

  • -i:表示运行容器

  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

  • –name :为创建的容器命名。

  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个

  • -v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

  • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

-it:表示运行容器并进入它的命令行

–name=mycentos:给当前的容器命名

centos:7:使用该镜像创建

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash

2. 启动/停止/删除/查看详情
命令概述
docker start 容器名称(或者容器ID)启动容器
docker stop 容器名称(或者容器ID)停止容器
docker rm 容器名称(或者容器ID)删除容器
docker rm -f 容器名称或id强制删除容器
docker inspect 容器名称(容器ID)查看容器详细信息

如果查看容器详细信息时不可看,执行下面命令重新查看即可

yum -y install net-tools

3. 目录挂载
命令概述举例
docker cp 需要拷贝的文件或目录 容器名称:容器目录宿主机复制文件到容器docker cp cp.txt c1:/root
docker cp 容器名称:容器目录 需要拷贝的文件或目录容器复制文件到宿主机docker cp c1:/root /root
创建容器 添加-v参数 后边为 宿主机目录:容器目录目录挂载docker run -id --name=c3 -v /root/con:/root/con centos:7

如果你共享的是多级的目录,可能会出现权限不足的提示。

这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数

--privileged=true 来解决挂载的目录没有权限的问题

docker run -id --privileged=true --name=c3 -v /usr/local/myhtml:/usr/local/myhtml centos:7
"Mounts": [
            {
                "Type": "bind",
                "Source": "/root/con", #宿主机目录
                "Destination": "/root/con", #容器中的目录
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],


4.服务部署

4.1 Tomcat部署

#拉取镜像
docker pull tomcat
#创建容器  -p表示地址映射 -v 表示目录挂载
docker run -id --name=tomcat_latest -p 8080:8080 -v /root/webapps:/usr/local/tomcat/webapps tomcat
#webapps目录下传入一个web的tomcat的包,访问192.168.6.100:8080/web就可以查看静态资源了

4.2 Mysql部署

在这里插入图片描述

#拉取镜像
docker pull mysql:5.7
#创建容器  -p表示地址映射 -v 表示目录挂载
sudo docker run -d --name mysql -p 3307:3306 \
--restart unless-stopped \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7  
#打开Navicat连接数据库即可

连接报端口错误,是由于没有开放端口,使用下面命令

firewall-cmd --zone=public --add-port=3306/tcp --permanent && firewall-cmd --reload

4.3 Nignx部署

#拉取镜像
docker pull nginx
#创建容器
docker run -id --name=nginx_lasted -p 80:80 nginx

4.4 Redis部署

#拉取镜像
docker pull redis
#创建容器
docker run -id --name=redis_lasted -p 6379:6379 redis

5. 镜像恢复与迁移

命令概述举例
docker commit 容器名称/ID 镜像名称:版本号将容器保存为镜像docker commit e3cf2a mytomcat:1.0
docker save –o 文件名.tar 镜像名称:版本号将镜像备份为tar文件docker save -o mytomcat.tar mytomcat:1.0
docker load -i 文件名.tar根据tar文件恢复为镜像docker load -i mytomcat.tar

6.DockerFile

6.1 概述

Dockerfile其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfile文件并根据Dockerfile文件的描述来构建镜像。

6.2 命令

命令概述
FROM image_name:tag定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name声明镜像的创建者
ENV key value设置环境变量 (可以写多条)
RUN command是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir设置工作目录

6.3 配置编写规则:yaml规则

官网https://docs.docker.com/compose/compose-file/compose-file-v3/

# 3层!

version:''  # 版本
services:  # 服务
   服务1:web
     # 服务配置
     images:
     build:
     network:
     ......
#其他配置
volumns:
networks:
configs:    

6.4 案例搭建

①创建目录

mkdir –p /usr/local/dockerjdk8

②上传jdk-8u144-linux-x64.tar.gz文件到创建目录下

③创建docker-file文件

vim docker-file

输入以下内容

#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER dean <dean@dean.com>
#切换工作目录
WORKDIR /usr
#RUN yum install -y glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u144-linux-i586.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
#定义容器启动执行的命令
CMD /bin/bash

④执行命令构建镜像

docker build -f ./docker-file -t jdk:1.8 .
  • -f 指定docker-file文件位置
  • -t指定要创建的镜像名称以及版本
  • .指代上下文路径

⑤查看镜像

docker images

7. Docker私有仓库

7.1 私有仓库搭建与配置

①拉取私有仓库镜像

docker pull registry

②启动私有仓库容器

docker run -id --name=registry -p 5000:5000 registry

③打开浏览器 输入地址 http://宿主机IP:5000/v2/_catalog 看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空

④修改daemon.json

vim /etc/docker/daemon.json
#添加以下内容
"insecure-registries":["宿主机IP:5000"]

⑤重启docker 服务

systemctl restart docker

7.2 镜像上传至私有仓库

①标记此镜像为私有仓库的镜像

docker tag centos:7 私有仓库服务器IP:5000/centos:7

②启动私服容器

docker start registry

③上传标记的镜像

docker push 私有仓库服务器IP:5000/centos:7

7.3 从私有仓库拉取镜像

docker pull 私有仓库服务器ip:5000/centos:7
docker images
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值