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