Docker
文章目录
什么是Docker
Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker是一种容器化技术。docker主要装的是环境。
为什么要使用Docker
思考:如何在同一台机器上运行基于不同版本的java应用呢?
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
1、更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2、更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
Docker与虚拟机的区别
区别
特性 | 容器 | 虚拟机 |
---|---|---|
启动时间 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于原生 |
系统支持量 | 单机支持上千个容器 | 一般是几十个 |
容器在资源占用和性能方面比虚拟机更有优势,而虚拟机在系统功能和安全性方面要强于容器。
Docker安装
下载wget工具
yum install -y wget
备份centos的yum仓库源
因为默认的下载源是从国外下载,会导致下载速度非常慢同,因此我们要将下载源修改为国内源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载阿里云仓库源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
更新本地软件列表和缓存
yum clean all
yum makecache
yum update
下载docker
yum install docker
设置开机启动和启动docker服务
systemctl start docker.service #启动docker服务
systemctl enable docker.service #设置为开机自启动
查看版本
docker -v
配置docker镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://lleteeh6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
查看镜像加速是否成功
docker info
#查看Registry Mirrors是否有上面镜像加速的地址,有就表示加速成功
HelloWorld
# 拉取helloworld镜像到本地
docker pull library/hello-world;
# 查看本地所有镜像
docker images;
Docker命令
镜像命令
拉取镜像
docker pull 镜像名称;
查看本地所有镜像
docker images;
删除镜像
docker rmi 镜像id
运行镜像
docker run 镜像名/镜像id
后台运行镜像
加上-d即可后台。
打开可交互功能
加上-it即可。
例如以后台方式运行centos
docker run -itd 镜像id
运行时指定容器名称
–name
docker run --name=centos1 镜像id
容器命令
查看正在运行的容器
docker ps
查看所有容器
docker ps -a
删除容器
docker rm 容器id
进入容器
进入容器有2种方式
- attach :该方式退出时会导致容器关闭。
- exec:不会导致容器关闭。
启动容器
docker start 容器id
停止容器
docker stop 容器id
向容器中复制文件
docker cp 文件 容器id:容器中的路径
将容器中的文件复制出来
docker cp 容器id:容器中的文件 主机路径
容器的导出
docker export 容器id > 文件名
容器的导入
# 导入本地容器快照文件
cat 快照文件名 | docker import - 镜像名称
# 导入远程url的快照文件
docker import http://xxxxxxxxxxx 镜像名称
制件镜像
- 使用现有的容器制作成镜像
- 使用Dockerfile文件来制件镜像
使用现有的容器制作成镜像(镜像更新)
docker commit -m "描述信息" -a "作者" 容器id 镜像名称
使用Dockerfile文件来制作镜像
先在linux下创建一个Dockerfile文件,然后编辑如下内容
# 以centos作为基础镜像
FROM centos
# 描述作者
MAINTAINER huahao xxx@xxx.com
# 创建日期
ENV REFRESHED_AT 2022-06-17
# 切换目录
WORKDIR /opt/
# 创建jdk目录
RUN mkdir jdk
# 将宿主机的JDK目录复制到/opt目录
Add jdk /opt/jdk
# 创建tomcat目录
RUN mkdir tomcat
# 将宿主机的tomcat目录复制到/opt目录
ADD tomcat /opt/tomcat
# 配置环境变量
ENV JAVA_HOME=/opt/jdk
ENV PATH=$PATH:$JAVA_HOME/bin
# 将ssm_war.war放到tomcat下的webapps目录
ADD ssm_war.war /opt/tomcat/webapps
# 公布8080端口
EXPOSE 8080
# 运行tomcat(运行镜像时才执行下面命令)
ENTRYPOINT ["/opt/tomcat/bin/catalina.sh","run"]
通过Dockerfile构建镜像
docker build -t 镜像名称 Dockerfile文件路径
#例(.表示当前目录)
docker build -t ssm:v2.0 .
上传镜像到DockerHub
上传镜像要确保你的镜像名称组成为:用户名/镜像名,否则上传不成功
- 验证账号和密码
docker login
- 上传
docker push 镜像名
YPOINT [“/opt/tomcat/bin/catalina.sh”,“run”]
通过Dockerfile构建镜像
```bash
docker build -t 镜像名称 Dockerfile文件路径
#例(.表示当前目录)
docker build -t ssm:v2.0 .
上传镜像到DockerHub
上传镜像要确保你的镜像名称组成为:用户名/镜像名,否则上传不成功
- 验证账号和密码
docker login
- 上传
docker push 镜像名