個人站長做網(wǎng)站seo網(wǎng)站優(yōu)化培訓(xùn)找哪些
1.鏡像 image: 是一個文件,包含了微型操作系統(tǒng)、核心代碼(可執(zhí)行程序)、依賴環(huán)境(庫)
2.倉庫 repository: 存放鏡像文件的地方
3.容器: container :是運行鏡像的地方---》是進(jìn)程????
1.將go語言程序上傳到centos7.9的系統(tǒng)里
go+html+mysql+redis.zip?
[root@docker ~]# mkdir? /Dockerfile
[root@docker ~]# cp go+html+mysql+redis.zip?? /Dockerfile/
[root@docker ~]# cd /Dockerfile/
[root@docker Dockerfile]# unzip go+html+mysql+redis.zip?? 解壓軟件包
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip? go.mod? go.sum? info.sql? Readme.md? server.go? static? templates
server.go?? 核心go語言程序代碼
Readme.md?? 了解程序,包括安裝和核心解析
info.sql??? 數(shù)據(jù)庫里的表和基礎(chǔ)數(shù)據(jù)
static???? 存放了網(wǎng)站的js和css代碼
templates? 存放了網(wǎng)站的靜態(tài)頁面
go.mod?? 本網(wǎng)站開發(fā)的時候使用的庫有哪些? module
go.mod 和go.sum有什么作用??
mod是包管理,sum是依賴關(guān)系管理
用于管理項目的依賴關(guān)系和版本信息,確保項目的構(gòu)建和部署的可重復(fù)性和一致性。
2.因為網(wǎng)站需要使用MySQL存放數(shù)據(jù),云服務(wù)器里啟動一個MySQL容器
root@aliyun-sz:~# docker? run? -d? -p? 3316:3306? --name go-mysql-1? -e? MYSQL_ROOT_PASSWORD='sc@123456'?? mysql:5.7.41
7f93b60b054ee2d3489cfae2226b787f276e76ac14116bc6d34bf4d77cc95983
在另外一臺客戶機(jī)上測試能否訪問公網(wǎng)上的MySQL數(shù)據(jù)庫
[root@docker Dockerfile]# mysql? -h 120.24.223.108 -uroot -p'sc@123456' -P 3316
Welcome to the MariaDB monitor.? Commands end with ; or \g.
Your MySQL connection id is 3
3.修改server.go核心程序的數(shù)據(jù)庫配置
[root@docker Dockerfile]# vim server.go
const (
??????? DB_USER???? = "root"
??????? DB_PASSWORD = "sc@123456"
??????? DB_NAME???? = "sanchuang"
??????? DB_HOST???????? = "tcp(8.138.156.120:3316)/"
??????? REDIS_HOST????? = "8.138.156.120:6379"
)修改為公網(wǎng)上的發(fā)布的數(shù)據(jù)庫服務(wù)器地址和端口
4.部署golang環(huán)境
[root@docker Dockerfile]# yum? install? epel-release ?golang ?-y
5.將go代碼編譯成二進(jìn)制程序? 本來有g(shù)o.mod和go.sum直接到第六步
[root@docker Dockerfile]# mv go.mod go.sum? /root
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip? info.sql? Readme.md? server.go? static? templates
[root@docker Dockerfile]# go mod init web?
產(chǎn)生go.mod 生成網(wǎng)站所需要的依賴的庫,寫到go.mod文件里
go: creating new go.mod: module web
go: to add module requirements and sums:
??? go mod tidy
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip? go.mod? info.sql? Readme.md? server.go? static? templates
配置一個國內(nèi)的go語言下載庫的代理網(wǎng)站
[root@docker Dockerfile]# go env -w GOPROXY=https://goproxy.cn,direct
[root@docker Dockerfile]#go mod tidy
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip go.mod go.sum info.sql Readme.md server.go? static? templates
6.編譯網(wǎng)站成一個二進(jìn)制程序
[root@docker Dockerfile]# go build -o server? server.go
[root@docker Dockerfile]# ls
go+html+mysql+redis.zip? go.mod? go.sum? info.sql? Readme.md? server(是編譯好的二進(jìn)制程序)? server.go? static? templates????
7.編寫dockerfile? ?dockerfile 是制作鏡像的配置文件
[root@docker Dockerfile]# mkdir? docker
[root@docker Dockerfile]# cd docker/
[root@docker docker]# vim dockerfile
FROM centos:7 ??#指定容器里使用的微型的系統(tǒng)是centos7 -->基礎(chǔ)鏡像
WORKDIR /go?????? #進(jìn)入容器會進(jìn)入這個目錄,工作目錄,在執(zhí)行鏡像的時候會自動創(chuàng)建--》家目錄 ---》docker exec
COPY . /go ??????#復(fù)制宿主機(jī)當(dāng)前目錄下的所有的內(nèi)容到容器的/go目錄下? docker cp
ENTRYPOINT ["/go/server"] ?#容器啟動運行的時候執(zhí)行的命令,使用的是絕對路徑執(zhí)行/go/server程序
CMD ["/go/server"]? #command 命令 和entrypoint二選一 entry可傳參更好
8.復(fù)制二進(jìn)制程序+static+templates文件夾到當(dāng)前目錄下? 這幾個必須放到一起 才能出效果 各自負(fù)責(zé)網(wǎng)頁 文檔等等
[root@docker docker]# ls
Dockerfile
[root@docker docker]# cp /Dockerfile/server .
[root@docker docker]# cp /Dockerfile/static/ . -r
[root@docker docker]# cp /Dockerfile/templates/? .? -r
[root@docker docker]# ls
Dockerfile? server? static? templates
下載centos7鏡像 傳到系統(tǒng)里,導(dǎo)入鏡像
[root@docker docker]# docker load? -i centos7.9.tar
[root@docker docker]# docker load? -i redis.tar
[root@docker docker]# docker build -t? scweb:1.0?? .
==>naming to docker.io/library/scweb:1.0? ? ? ?0.0s? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
[root@docker docker]# docker images
REPOSITORY?? TAG?????? IMAGE ID?????? CREATED????????? SIZE
scweb??????? 1.0?????? 162f3d33f84e?? 34 seconds ago?? 464MB
啟動自己制作的鏡像的容器
docker run? -d? -p 8080:8080 --name? scweb-1? scweb:1.0
cali? 2022? 去瀏覽器訪問
將基礎(chǔ)數(shù)據(jù)導(dǎo)入到云服務(wù)器里的mysql容器里mysql -uroot -p'sc@123456' -P 3316 -h 120.24.223.108 sanchuang < info.sql
因為我們在內(nèi)網(wǎng)的docker宿主機(jī)上遠(yuǎn)程連接到云服務(wù)器的mysql容器里,需要一個mysql的客戶端工具,需要安裝mariadb軟件
模擬server.go? 程序升級? --》增加了新功能
1.重新產(chǎn)生二進(jìn)制程序 server
[root@docker Dockerfile]# go build -o server server.go
2.如果靜態(tài)頁面有更新,也需要復(fù)制到相關(guān)的目錄
[root@docker Dockerfile]# mkdir version2
[root@docker Dockerfile]# cd version2/
[root@docker version2]# cp /Dockerfile/docker/Dockerfile .
[root@docker version2]# cp /Dockerfile/server .
[root@docker version2]# cp /Dockerfile/static/ . -r
[root@docker version2]# cp /Dockerfile/templates/ . -r
[root@docker version2]# docker build -t scweb:1.1 .
[root@docker version2]# docker images
REPOSITORY?? TAG?????? IMAGE ID?????? CREATED????????? SIZE
scweb??????? 1.1?????? 907d859bae91?? 14 seconds ago?? 222MB
scweb??????? 1.0?????? 162f3d33f84e?? 3 hours ago????? 464MB
3.刪除舊的容器和鏡像文件
[root@docker version2]# docker ps
CONTAINER ID?? IMAGE?????? COMMAND??????? CREATED????????? STATUS????????? PORTS?????????????????????????????????????? NAMES
9106914dc4c9?? scweb:1.0?? "/go/server"?? 27 minutes ago?? Up 27 minutes?? 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp?? scweb-1
[root@docker version2]# docker stop scweb-1
[root@docker version2]# docker rm scweb-1
啟動自己制作的鏡像的容器
docker run? -d? -p 8080:8080 --name? scweb-1? scweb:1.1
?????????????
[root@fengdeyong images]# docker pull nginx/nginx-ingress
基礎(chǔ)鏡像: 提供了一個最基本的環(huán)境或者某個程序所依賴的環(huán)境?? ---》系統(tǒng)、java
alpine? 是一個非常小的linux基礎(chǔ)鏡像? centos? ubuntu? debian? busybox
[root@docker docker]# docker run??? -it? --name alpine-2? alpine sh
/ # ls
bin??? dev??? etc??? home?? lib??? media? mnt??? opt??? proc?? root?? run??? sbin?? srv??? sys??? tmp??? usr??? var
/ # cd /
/ # pwd
/ # exit
[root@docker docker]# mkdir /alpine
[root@docker docker]# cd /alpine/
[root@docker alpine]# cp /etc/yum.repos.d/Centos-7.repo .
[root@docker alpine]# ls
Centos-7.repo? Dockerfile
[root@docker alpine]# vim Dockerfile
FROM centos:7.9
WORKDIR /sanchuang
RUN? rm -rf /etc/yum.repos.d/CentOS*
COPY Centos-7.repo? /etc/yum.repos.d/Centos-7.repo
RUN? mkdir? /wang
RUN? cd? /wang
RUN? echo "hello,wang" >/wang/hello.txt
RUN? echo "hello,world">/wang/hello.txt
CMD ["bash","-c","sleep 3000"]
[root@docker alpine]# docker build -t sccentos:7.9? .
[root@docker alpine]# docker images
REPOSITORY?? TAG?????? IMAGE ID?????? CREATED????????? SIZE?????????????????????????????????????????????????????????????????????????????????????????????????
sccentos???? 7.9?????? a1ccf05ca8f8?? 37 seconds ago?? 516MB
alpine?????? latest??? a606584aa9aa?? 5 weeks ago????? 7.8MB
-d? 在后臺運行程序????? -it 開啟一個終端,在前臺運行? 和-d不能同時寫
?bash 進(jìn)入容器運行的程序?? --rm 當(dāng)容器退出的時候,自動刪除容器
[root@docker alpine]# docker run -it --rm? --name sccentos-1? sccentos:7.9? bash
[root@6eec939529fd sanchuang]# pwd
/sanchuang
[root@6eec939529fd sanchuang]# cd /etc/yum.repos.d/
[root@6eec939529fd yum.repos.d]# ls
Centos-7.repo
[root@docker alpine]# docker build -t sccentos:7.8? .