Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
使用Docker后的开发部署流程:
开发:建立模型–环境–打包带上环境,即镜像–放到Docker仓库
部署:下载Docker中的镜像,直接运行即可
Docker的思想来自于集装箱,集装箱,对环境进行隔离
Docker通过隔离机制,可以将服务器利用到极致。
每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。
Docker出现的原因–应用环境配置费时费力
版本问题、底层依赖冲突问题
一般在公司我们制作一个产品通常需要开发和上线,这就涉及到开发人员和运维人员的工作。
而通常一个产品会有两套环境,一套环境是开发人员的开发时所用的环境,另一套则是运维人员根据开发人员的提示所配置的环境,
但这两套环境和应用配置难免会有不同或冲突,这就导致有时候在开发人员电脑上可以运行但上线时却无法运行。版本更新导致服务不可用。
轻巧
–相对于笨重的虚拟机vm: linux centos 原生镜像(一个电脑) 隔离,需要开启多个虚拟机 几个G 几分钟
docker: 隔离 镜像(最核心的环境,4m+jdk+mysql) 十分小巧, 秒级启动
容器化技术不是模拟的一个完整的操作系统
传统虚拟机:模拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
docker:容器内的应用直接运行在宿主机的内核,容器是没有自己的内核,也没有虚拟我们的硬件,所以就轻便了
DevOps(开发、运维)
开发和运维
过程中,Docker 具有以下几个方面的优势:传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
使用了Docker之后,我们部署应用就和搭积木一样!项目打包为一个镜像,扩展 服务器A!服务器B
在容器化之后,我们的开发,测试环境都是高度一致的。
Docker是内核级别的虚拟化,可以再一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。
Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。
每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。
Docker Hub:国外的
阿里云:配置镜像加速
证明1:docker容器相当一个轻量级的Linux运行环境:
可以看到,分别在centos容器、tomcat容器、nginx容器内部查看了系统的版本信息,发现他们底层系统都是Linux,通过命令,观察他们的版本信息,发现他们的系统版本,可以是不一样的,可以是linux发行版的RedHat系列(centos),也可以是linux发行版的Debian系列(debian)。
证明2:容器的特性是相互隔离,各自运行各自的程序,各自有各自的环境。每个容器内都有一个属于自己的文件系统,互不影响。
通过命令ls,分别在centos容器、tomcat容器、nginx容器内部查看到他们有属于自己的文件系统,都是不同的。
通过命令ip,分别在centos容器、tomcat容器、nginx容器内部查看到,在centos系统可以直接得到ip信息,而一开始tomcat、nginx容器内部,都是ip命令找不到,后来,咱通过给tomcat容器修改一下apt源的镜像,并更新一下命令,然后安装iproute2(没给nginx容器安装iproute2命令)的情况下,分别在tomcat、nginx容器内部查看ip命令,发现只有tomcat 容器可以正常使用ip命令。由此,证明了容器隔离的特性。
# 创建centos的容器
docker pull centos
docker run -it --name centos01 centos /bin/bash
# ———————————————————————————————————————— ls 命令查看目录信息————————————————————————————————————
[root@dfd0ef52fc43 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# -----------------------------------这个时候,查看系统的版本信息---------------------------------
[root@dfd0ef52fc43 /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
[root@dfd0ef52fc43 /]# cat /etc/redhat-release
CentOS Linux release 8.4.2105
# ========================================使用命令 ip =====================================
[root@eed52d253e26 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
# 创建tomcat的容器
docker pull tomcat:9.0
docker run -it --name tomcat01 tomcat:9.0 /bin/bash
# ———————————————————————————————————————— ls 命令查看目录信息————————————————————————————————————
root@f1cfb81dedfd:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
# -----------------------------------这个时候,查看系统的版本信息---------------------------------
root@f1cfb81dedfd:/usr/local/tomcat# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@f1cfb81dedfd:/usr/local/tomcat# cat /etc/debian_version
11.2
# ========================================使用命令 ip =====================================
root@f1cfb81dedfd:/usr/local/tomcat# ip a
bash: ip: command not found
# ~~~~~~~~~~~~~~~~~~~~~~~~ 给tomcat容器修改一下apt源的镜像,并更新一下命令,然后安装iproute2~~~~~~~~~~~~~~~~~~
# 修改apt下的sources.list
# 先备份,可以选择创建一个文件夹,然后拷贝一份放进去
root@f1cfb81dedfd:/etc/apt# mkdir cat sources.list.backup
root@f1cfb81dedfd:/etc/apt# cp sources.list ./sources.list.backup
root@f1cfb81dedfd:/etc/apt/sources.list.backup# cd ../
# 使用命令 echo 覆盖+追加方式
deb https://mirrors.aliyun.com/debian bullseye main
deb https://mirrors.aliyun.com/debian-security bullseye-security main
deb https://mirrors.aliyun.com/debian bullseye-updates main
# 执行一下更新命令:
apt-get update -y
# 执行下载 iproute2命令:
apt install -y iproute2
# 再次执行ip 命令
root@f1cfb81dedfd:/usr/local/tomcat# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
# 创建nginx的容器
docker pull nginx
docker run -it --name nginx01 nginx /bin/bash
# ———————————————————————————————————————— ls 命令查看目录信息————————————————————————————————————
root@7b002c0ac35e:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
# -----------------------------------这个时候,查看系统的版本信息---------------------------------
root@7b002c0ac35e:/# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@7b002c0ac35e:/# cat /etc/debian_version
11.2
# ========================================使用命令 ip =====================================
root@f4cc7c858a88:/# ip a
bash: ip: command not found
# ~~~~~~ 在给tomcat容器修改一下apt源的镜像,并更新一下命令,然后安装iproute2(没给nginx容器安装iproute2命令哦),查看ip命令~~~~~~
root@f4cc7c858a88:/# ip a
bash: ip: command not found
☺ 参考来源:
狂神的B站视频《【狂神说Java】Docker最新超详细版教程通俗易懂》 https://www.bilibili.com/video/BV1og4y1q7M4
如果本文对你有帮助的话记得给一乐点个赞哦,感谢!