前言
记录一下关于docker的相关内容和在上面部署项目的一些经验
Docker简单介绍
干嘛的
是个打包工具
用来保证别人的代码可以在自己电脑上跑,或者自己的项目分享给别人正常运行
特点
- 和虚拟机类似,可以看做是微型虚拟机,因为它就是把项目所需要的环境条件抽取出来写成Dockerfile脚本文件在宿主机中搭环境
知识点了解
- 镜像(images)和容器(container):就像类和对象的关系 镜像是容器的模板,容器是镜像运行时的实例。容器可以被创建、启动、停止、删除、暂停等。
- 镜像仓库:存放镜像的,包括本地仓库和远程仓库(Docker Hub或 阿里云 容器镜像服务)
- Dockerfile:一个叫Dockerfile的文件,里面包含如何构建镜像的指令
Docker安装
Windows下安装
提前记录个问题:
关于Hyper-V和模拟器的冲突:
Windows下安装完Docker后,如果安装什么其他模拟器会关闭Hyper-V以及相关功能导致Docker无法使用
即使重新开启功能也无法再安装Docker
解决方法
其实我这个应该算是 Hyper-V异常导致的,所以要么禁用之后再启用,要么直接运行以下命令,算是重启这个服务:
bcdedit /set hypervisorlaunchtype auto
之后再重启电脑就ok了,可以愉快地开始docker旅程了。
Linux 安装
安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
在Docker上部署项目
1. 首先保证这个项目可以正常运行
2. 编写Dockerfile文件
FROM golang:latest //定制镜像所需要的基础镜像
RUN mkdir /app //创建一个文件夹
WORKDIR /app //移动到指定的目录
ADD . /app //将当前的目录的文件都拷贝到/app目录
RUN go build -o main ./main.go //构建go二进制文件
EXPOSE 8888 //输出的端口号
CMD /app/main //执行,有点像shell
- FROM- 镜像从那里来
- MAINTAINER- 镜像维护者信息
- RUN- 构建镜像执行的命令,每一次RUN都会构建一层
- CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数
- VOLUME- 定义数据卷,如果没有定义则使用默认
- USER- 指定后续执行的用户组和用户
- WORKDIR- 切换当前执行的工作目录
- HEALTHCHECH- 健康检测指令
- ARG- 变量属性值,但不在容器内部起作用
- EXPOSE- 暴露端口
- ENV- 变量属性值,容器内部也会起作用
- ADD- 添加文件,如果是压缩文件也解压
- COPY- 添加文件,以复制的形式
- ENTRYPOINT- 容器进入时执行的命令
3.开始构建镜像
Dockerfile 文件的存放目录下,执行构建动作。
$ docker build -t nginx:v3 .
最后一个·别忘打,不然就这样
这个点代表上下文路径,默认为Dockerfile所在位置
构建完成后 运行
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
可以通过docker ps查看当前运行中的容器
4.将远程镜像拉取本地运行
这里把刚刚构建的镜像托管在阿里云中
先在阿里云中创建仓库registry 登录仓库
docker login --username=用户名 仓库地址
将镜像推送到Registry
$ docker tag [ImageId] 仓库地址:[镜像版本号]
$ docker push 仓库地址:[镜像版本号]
从Registry中拉取镜像
$ docker pull 仓库地址:[镜像版本号]