文件目錄
Dockerfile 是docker制作鏡像的文件,docker_run.sh是sh文件,gin_test是go編譯之后的linux可執行程序,gintest.env是配置文件夾
首先寫一個Dockerfile的文件 用來執行build 編譯為鏡像
# Dockerfile
# 下載基礎鏡像 這相當於電腦windows系統 所有一切都要在該系統上操作 FROM ubuntu:latest # WORKDIR 指定容器中的工作目錄,默認文件都是在哪保存執行 # WORKDIR /webapp/ # 暴露鏡像的端口供主機做映射,不過一般都是直接docker run ... -p 宿主機端口:容器端口 ... 設置了 可以設置多個 EXPOSE 7999 EXPOSE 8888 # COPY 將主機的文件復制到鏡像內 其中ADD和COPY一樣 但是ADD會對壓縮文件(tar, gzip, bzip2, etc)做提取和解壓操作 # COPY如果目的位置不存在,Docker會自動創建所有需要的目錄結構,但是它只是單純的復制,並不會去做文件提取和解壓工作 COPY gin_test . COPY gintest.env . # VOLUME 用來向基於鏡像創建的容器添加卷。 # 比如你可以將mongodb鏡像中存儲數據的data文件指定為主機的某個文件。(容器內部建議不要存儲任何數據) # VOLUME 主機目錄 容器目錄 # VOLUME /data/db /data/configdb # 鏡像內部的執行... 下載數據軟件等... 並不是在宿主機上執行 而是到鏡像中執行的命令 # 比如這些命令RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME # 容器內部執行apt更新 # RUN ["apt-get" "update"] # 容器啟動時執行指令 ENTRYPOINT # CMD docker run -it -d -p 7999:7999 ubuntu
# docker_run.sh
#!/bin/bash # docker build 根據當前目錄的Dockerfile文件內容制作鏡像 . 代表當前目錄(可以絕對路徑) -t表示設置鏡像名字 docker build -t myweb . # 加載鏡像啟動容器 根據鏡像名字設置啟動模式 -itd 表示后台命令行模式... -p在宿主機和容器開啟的端口連接一起 # /bin/bash 表示在容器內部執行一些命令但不進入 -c 如果需要找容器內部執行命令 必須有-c 后面這是執行命令 啟動容器內復制過去的./gin_test docker run -itd -p 1111:7999 --name="myweb_docker_one" myweb /bin/bash -c ./gin_test # 展示docker容器的執行狀況 docker ps # 持續監控docker容器內部的輸出日志 -t 監控日志 --tail 只顯示多少條 # docker logs -t --tail=20 myweb_docker_one # 進入容器內部 docker exec -it 容器名字 bash 執行命令行模式 如何有其他需求可以進入內部執行,不過一般都在創建容器階段執行了 # docker exec -it myweb_docker_one bash # 進入容器內部執行 接上面的命令 # ./gin_test
將工作目錄的四個文件拉取到linux服務器上,最好同一個目錄下
注意 docker_run.sh 和gin_test 需要進行添加執行權限
chmod +x docker_run.sh chmod +x gin_test
還有如果sh文件在win上寫的,在linux上執行需要轉換格式,不然出錯
格式化命令如下
# vim打開sh文件 vim docker_run.sh # 輸出 :set fileformat=unix
執行sh文件
# 已輸出每行命令的格式執行 bash -x docker_run.sh
輸出如下
測試能否外部訪問內部web程序
能看到訪問該服務器宿主機ip和端口能訪問到 容器內的web程序