本周进行了Docker相关知识的学习,于此做一个总结。内容分别如下:
一:Docker和Docker Desktop的安装;
二:虚拟机创建安装;
三:Docker关键概念;
四:Docker命令;
五:本地部署应用;
一:Docker和Docker Desktop的安装:
参考官方文档(https://docs.docker.com/desktop/install/windows-install/)
- 此处安装Docker Desktop,这是docker的一个管理工具,提供图形界面交互。(安装结束可进入cmd查看是否安装完成,docker --version可查看版本号,若不成功检查是否将docker路径添加到系统变量中)
- 再在desktop下方下载wsl的更新包。
- 在电脑的Microsoft Store安装Ubuntu
二:虚拟机创建安装
参考
正常情况下按教程配置网络是没问题的,安装结束后可ping www.baidu.com查看是否能接通网络,若失败就搜一搜解决一下吧,网络配置的问题千奇百怪。
- 在CentOS上安装docker:
1:下载相关依赖yum install -y yum-utils device-mapper-persistent-data lvm2
2:下载Dockeryum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
3:因为默认访问的是国外的镜像源,若是上述命令下载太慢,可更改为阿里的镜像源再执行上述命令yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4:同样使用docker --version检验是否安装成功
三:Docker相关概念
1:什么是Docker
Docker是一个开源的应用容器引擎,开发者可以将应用以及依赖包打包到一个可移植的容器中,Linux机器和windows机器可以从相应仓库通过拉取镜像的方式获得该应用。Docker的主要目标是通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的一次封装,到处运行。
2:Docker解决的问题
早期的开发环境是开发、测试、运维三步骤割离,通常是开发人员将应用程序开发完成后交给测试人员测试,测试全部完成后再交付给运维人员进行部署上线。这样的情况造成的问题是开发人员开发的时候需要创建一次环境,测试人员测试的时候需要再创建一次环境,运维人员发布的时候也需要在服务器中创建相应环境,不同机器的环境配置问题千奇百怪,严重影响效率和体验。Docker的出现实现了开发运维一体化、敏捷式开发,通过将应用封装成容器,容器中包含着所需的运行环境,将对主机环境的依赖隔离开,脱离底层机器,实现环境统一,提高了开发效率,只需要在服务器上启动相应的容器即可完成部署工作,而不需一遍一遍地在各个服务器上配置相同地环境。
3:核心概念
镜像:类似于虚拟机的镜像,是一个包含文件系统的面向docker引擎的只读模板。可以是一个只包含操作系统环境的镜像,如Ubuntu镜像,CentOS镜像,也可以是安装了应用程序的镜像。
容器:容器是从镜像创建的应用运行实例,类似于一个轻量级的沙箱,容器间是相互隔离、互不可见的。可以把容器理解为货轮上的集装箱,这也是docker图标的寓意,集装箱之间互不可见,互不影响。
仓库:docker集中存放镜像文件的场所,可分为公开仓库和私有仓库两种形式。
四:Docker命令
以下是个人总结的较常用的docker命令,若是对相关命令的参数有疑问可通过docker 命令名 -help
查看
192.168.40.128是我自己搭的虚拟机的ip地址,可通过ifconfig查看对应的ip地址,5000即暴露出的端口号。
镜像:
拉取镜像(默认dockerhub):docker pull image_name:tag
从本地仓库拉取镜像:docker pull 192.168.40.128:5000/name:tag
查看镜像信息:docker images
为镜像添加新标签:docker tag name:tag name:newtag
获取镜像详细信息(返回json格式):docker inspect image_id
寻找镜像(默认dockerhub):docker search image_name
删除镜像(容器存在时无法删除):docker rmi image:tag
docker rmi id
上传镜像(上传到私有仓库,需开启容器,分配5000端口):docker push 192.168.40.128:5000/name:tag
基于本地模板导入创建镜像:docker import name:tag
存出镜像到本地:docker save -o filename name:tag
载入文件到镜像:docker load –input filename
容器:
查看运行中的容器:docker ps
查看所有容器:docker ps -a
创建并运行容器:docker run –name container_name -d image_name
创建容器:docker create -it image_name:tag
启动容器:docker start 上步获得的容器id号
获得容器输出信息:docker logs container_id
终止容器:docker stop container_id
重启容器:docker restart container_id
删除容器:docker rm container_id
导出容器:docker export container_id>filename
导入容器:docker import/load -仓库名/镜像名
仓库
使用registry镜像创建仓库:docker run -d -p 5000:5000 registry
镜像上传到仓库:
更改镜像标签:docker tag image_name:tag address:port/name:tag
上传镜像:docker push address:port/name:tag
在浏览器中输入 上述地址/v2/_catalog,检验仓库是否有该镜像
数据卷:
创建数据卷:docker volume create name
查看数据卷信息:docker volume ls
查看数据卷详细信息:docker volume inspect name
删除数据卷:docker volume rm name
删除所有未使用的数据卷:docker volume prune
创建容器并挂载数据卷到容器上:docker run –name container_name -v volume_name:/容器目录 -p 5000:5000 -d image_name
挂载本机目录:docker run -it -v 主机目录:容器目录
五:本地部署应用
以部署html文件为例:
1:桌面左下角打开cmd,mkdir test
新建文件夹test,再cd test
进入test文件夹,
echo "hello world" >> hello.html
创建hello.html文件并向其中写入内容,创建Dockerfile文件,无后缀。
2:docker pull tomcat
拉取tomcat镜像作为初始镜像,默认标签为latest,docker images
查看镜像是否拉取成功。
3:在上述test文件夹中编写Dockerfile文件,
from表示使用的基础镜像
maintainer 表示作者
run 命令表示在tomcat环境中的webapps目录下新建文件夹test
copy表示将当前目录的hello.html复制到指定路径中的文件
上述路径均为绝对路径
Dockerfile
FROM tomcat
MAINTAINER ky
RUN mkdir /usr/local/tomcat/webapps/test
COPY hello.html /usr/local/tomcat/webapps/test/hello.html
可通过如下命令获取路径信息
启动容器 docker run tomcat:latest
进入容器内部 docker exec -it 容器名或容器id bash (docker ps可查看容器的name和id)
查看完路径需关闭当前容器 docker stop 容器id;docker rm 容器id
执行Dockerfile 文件:
docker build -t tomcat . #最后这个.必须加
启动新容器:
docker run --name helloworld -d -p 8081:8080 tomcat
#将容器命名为helloworld,-d表示在后台运行,-p表示暴露端口号与之通信
在浏览器中输入127.0.0.1:8081/test/hello.html
即可访问hello.html文件,至此部署成功。