目录
docker的理念来自于集装箱,本质上就是一种虚拟机技术。一个开源的应用容器引擎,
让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口。使用go语言编写的。
实际上就是docker上拉取应用,只要Linux上能装docker,它就能使用docker上拉取的应用,
解决了环境不一致、解决了扩容、解决了资源之间相互隔离,动态扩容、微服务组件等问题
注意:docker本身并不是容器,他是创建容器的工具,是一个应用容器引擎。
简单来说:
为什么要用?
一句话:开箱即用,快速部署,可移植性强,环境隔离
镜像(image)。注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04、12.04等不同版本的镜像。
容器(container)。Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统。例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。
仓库(repository)。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。可以从一个镜像创建无数个容器。平时我们主要操作的就是容器。我们也可以把容器打包成镜像以方便再次使用。镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。

下面命令中有些命令后面会带个 \ 是因为嫌这个命令太长了给分隔开来,
如果运行命令不成功可以把 \ 给去了
先卸载是怕虚拟机之前有docker相关的残留
- # yum remove docker \
- docker-client \
- docker-client-latest \
- docker-common \
- docker-latest \
- docker-latest-logrotate \
- docker-logrotate \
- docker-selinux \
- docker-engine-selinux \
- docker-engine
去 \ 后写法:
# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
1) 安装yum命令的一些依赖包
# yum -y install yum-utils
2) 设置国内的yum源。这样下载会快,也稳定(可设可不设)
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3) 更新yum源缓存,并安装 docker-ce
# yum -y install docker-ce docker-ce-cli containerd.io
4) 测试docker是否安装成功,查看版本
# docker version
5)启动docker
- # 开机自启动
- # systemctl start docker
- # 启动docker
- # systemctl start docker
6) 测试docker是否启动成功(在仓库中拉取一个helloWorld镜像)
# docker run --rm hello-world
- # docker version #显示docker的版本信息。
- # docker info #显示docker的系统信息,包括镜像和容器的数量
- # docker 命令 --help #帮助命令
- #帮助文档的地址:https://docs.docker.com/engine/reference/commandline/build/
汇总:
- # docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
- # docker search 搜索镜像
- # docker pull 下载镜像 docker image pull
- # docker rmi 删除镜像 docker image rm
# docker images
执行结果如下:
- REPOSITORY TAG IMAGE ID CREATED SIZE
- hello-world latest d1165f221234 7 weeks ago 13.3kB
- mysql latest e3fcc9e1cc04 9 months ago 544MB
说明:
REPOSITORY:镜像的名称;
TAG:版本,latest表示最新版本;
IMAGE ID:镜像ID,自动生成不会重复;
CREATED:什么时候创建的;
SIZE:大小
- # 以查询mysql镜像为例
- # docker search mysql
说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建
# docker pull mysql
- # mysql为例
- # docker rmi mysql
- # 创建并启动容器
- # docker run 参数 image
- # 查看所有容器
- # docker ps -a
- # 删除容器
- # docker rm 容器id
- # 启动容器
- # docker start 容器id
- # 停止容器
- # docker stop 容器id
- # 重启容器
- # docker restart 容器id
- # 强制停止容器
- # docker kill 容器id
- # 在运行的容器中执行命令
- # docker exec 参数 容器id 命令
- # 查看容器日志
- # docker logs 容器id
如果数据都在容器中,那么我们容器删除,数据就会丢失。例如mysql,如果把mysql容器删除了,那么数据也没有了。这种情况是不好的。所以我们需要把容器和数据分开。我们想把Docker容器中产生的数据,同步到本地(宿主机)。这就是容器卷。
- # 三种挂载: 匿名挂载、具名挂载、指定路径挂载
- -v 容器内路径 #匿名挂载
- -v 卷名:容器内路径 #具名挂载
- -v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的
例如mysql:
- # 参数说明
- # -d 程序后台运行
- # -p 绑定宿主机端口和容器端口
- # --name 给容器起个名字
- # -v 挂载容器卷
- # -it 输出
- # run --name=mysql -p 3316:3306 -v /etc/mysql/data:/data -it -e MYSQL_ROOT_PASSWORD=123456 -d mysql
- #进入mysql容器
- docker exec -it mysql bash
- #修改mysql密码
- mysql -u root -p
dockerfile 是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1、 编写一个dockerfile文件 2、 docker build 构建称为一个镜像 3、 docker run运行镜像 4、 docker push发布镜像(DockerHub 、阿里云仓库)
- # DockerFile常用指令
- FROM # 基础镜像,一切从这里开始构建
- MAINTAINER # 镜像是谁写的, 姓名+邮箱
- RUN # 镜像构建的时候需要运行的命令
- ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
- WORKDIR # 镜像的工作目录
- VOLUME # 挂载的目录
- EXPOSE # 保留端口配置
- CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
- ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
- ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
- COPY # 类似ADD,将我们文件拷贝到镜像中
- ENV # 构建的时候设置环境变量!
mvn package
注意dockerfile和jar要在同一目录下
- FROM java:8
- COPY *.jar /app9091.jar
- CMD ["--server.port=8080"]
- EXPOSE 8080
- ENTRYPOINT ["java","-jar","app9091.jar"]
# 注意 后面有个. 表示是同级目录 # docker build -t springboot01:v1 .
# docker images
此部分命令参考阿里云镜像仓库页面
- # 请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
- # 镜像版本号tag和ImageId 通过 docker images 查看
- # docker login --username=wujianyou10****@163.com registry.cn-hangzhou.aliyuncs.com
- # docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/youyou102105/test01:[镜像版本号]
- # docker push registry.cn-hangzhou.aliyuncs.com/youyou102105/test01:[镜像版本号]
# docker pull registry.cn-hangzhou.aliyuncs.com/youyou102105/test01:[镜像版本号]