docker构建镜像并上传dockerhub
前提条件:需要连接梯子
- 将梯子配置到虚拟机中(确保主机能够连接 hub.docker.com)
- 使用
ipconfig
查询主机的 ip4地址 - 虚拟机的连接模式改成桥接模式(复制主机的地址网络)
- 将ip4配置到虚拟机(将/etc/environment中的http的ip地址和端口更改为主机查询到的ip4地址(除localhost之外的所有))
# http_proxy="http://ip地址:端口号"
http_proxy="http://192.168.1.26:10090"
https_proxy="http://192.168.1.26:10090"
ftp_proxy="http://192.168.1.26:10090"
no_proxy="localhost,127.0.0.1"
# no_proxy 表示什么时候不走代理
source /etc/environment
运行一下新配置的环境变量echo $http_proxy
或者echo $path
查看一下环境变量是否设置成功- 没有成功的话,尝试重启虚拟机
- 虚拟机能够连上google之后不代表docker能够使用梯子,因为docker是独立的,所以需要再次配置daemon.json文件中的http代理协议
- 配置完成之后重启docker(
systemctl restart docker
)
- 了解dockerfile(docker能够实现的基础)中的内容
Dockerfile 本质上是一个文本文件,用于定义如何自动构建 Docker 镜像。它包含了一系列指令(Instructions),这些指令是用来指导镜像的构建过程,实现自动化、可移植性和环境一致性。 Docker 引擎会按照这些指令逐步构建出一个可运行的容器镜像。
以下是dockerfile中的一些基础内容(关键词必须是大写的):
# 拉取镜像 from node
FROM node:alpine
# alpine :轻量级的Linux操作系统(如果使用ubuntu的话会比alpine大很多)# 创建工程目录
WORKDIR /usr/src/app
# 这个目录是docker container(docker容器)里边的文件系统# 拷贝文件并安装
# copy 主机目录(源头) docker容器目录(目标)
COPY package*.json ./
# 和python中的pip install一样,安装 包
RUN npm install # copy的第一个.相对路径(主机目录)
# copy的第二个.相对路径(docker镜像目录)
COPY . .# 表示该程序运行在容器的3000端口
EXPOSE 3000
# 注:运行到主机端口需要用到端口映射( 端口映射:容器端口 映射 主机端口)
# 在主机通过主机端口去运行容器# 运行server.js(镜像到容器的分界,使静态转化为动态可运行的状态,在cmd中要写的内容)
CMD ["node","sever.js"]
# 如果是python文件的话就是 cmd ["python","xx.py"]
- 工程创建好之后需要使用
build
构建镜像,基于镜像在容器中运行程序。
# 将当前目录 构建 名称为名称 的镜像
docker build -t 名称 .
# 注:如果要推到dockerhub上的时候名称需要带上自己在dockerhub上的用户名# 查看镜像
docker image ls
# 运行容器,并将容器端口映射到主机端口
docker run -p 主机端口号:容器端口号 镜像名称
# 查看运行的容器
docker container ls # 停止id的容器
docker stop ID
# 查看所有的运行过的容器
docker ps -a
- 将构建好的镜像上传的到自己的dockerhub中
# 将docker中的镜像上传到dockerhub中自己的仓库中:
# 登录账号:
docker login -u 用户名
# 将镜像推到dockerhub 中
docker push 镜像名# 从dockerhub中下载相应的镜像
# 其中在拉取 其他镜像的时候会使用-it参数,表示以交互式的方式去运行,本地没有的话会从网上下载)
docker pull 用户名称/镜像名称
# 注意:不同操作系统生成的镜像不能在不同操作系统下运行(即windows的镜像只能在windows操作系统中运行)# 删除镜像(要先删除依赖其产生的容器,才能删除镜像)
# rmi是remove image的缩写
docker rmi 镜像ID
# 删除容器
docker rm 容器id