建網(wǎng)站公司用什么網(wǎng)站程序濟(jì)南百度競(jìng)價(jià)開戶
目錄
(一)鏡像命令
一、拉取Nginx
二、查看鏡像
三、導(dǎo)出文件
四、刪除鏡像
五、加載鏡像
(二)容器命令
一、例子:運(yùn)行一個(gè)nginx容器
1、輸入運(yùn)行命令
2、使用命令查看宿主機(jī)ip
3、在外部瀏覽器訪問
4、查看日志
二、例子:修改nginx的index.html文件
1、進(jìn)入容器
2、進(jìn)入HTML所在目錄
3、修改內(nèi)容
4、在網(wǎng)頁(yè)查看
5、停止容器
6、重啟容器
7、刪除容器
8、展示容器
三、例子:創(chuàng)建并運(yùn)行一個(gè)redis容器,并實(shí)現(xiàn)數(shù)據(jù)持久化
1、使用命令運(yùn)行redis容器
2、進(jìn)入容器,并執(zhí)行redis-cli客戶端命令,存入num=666
3、查看是否成功
注:也可以直接進(jìn)入redis
四、數(shù)據(jù)卷
1、傳統(tǒng)數(shù)據(jù)和容器耦合
2、使用數(shù)據(jù)卷解決問題
3、基本操作
4、數(shù)據(jù)卷的作用
五、例子:創(chuàng)建一個(gè)數(shù)據(jù)卷,并查看數(shù)據(jù)卷在宿主機(jī)的目錄位置
1、使用命令創(chuàng)建數(shù)據(jù)卷
2、查看是否創(chuàng)建成功
3、查看詳細(xì)信息
4、刪除未使用的卷
六、例子:掛載數(shù)據(jù)卷
1、創(chuàng)建nginx容器并掛載
2、查看數(shù)據(jù)卷詳細(xì)信息
3、復(fù)制文件位置,在Moba中找到文件
4、右鍵選擇使用VSCode打開,并修改
5、在網(wǎng)頁(yè)中查看
七、例子:創(chuàng)建并運(yùn)行一個(gè)MySQL容器,將宿主機(jī)目錄直接掛載到容器
1、下載或?qū)雖ysql鏡像
2、創(chuàng)建目錄
3、在conf中創(chuàng)建配置文件并編寫
4、創(chuàng)建容器并掛載
6、總結(jié)
八、自定義鏡像
九、例子:基于Ubuntu鏡像構(gòu)建一個(gè)新的鏡像,運(yùn)行一個(gè)java項(xiàng)目
1、創(chuàng)建docker-demo目錄和Dockerfile文件,并在其中編寫如下
2、向docker-demo中導(dǎo)入文件
3、輸入命令,創(chuàng)建鏡像
4、創(chuàng)建容器
5、在頁(yè)面訪問
十、例子:使用alpine創(chuàng)建鏡像
1、修改dockerfile
2、構(gòu)建鏡像
十一、DockerCompose
1、作用:
十二、部署微服務(wù)集群
1、編寫docker-compose.yml文件
2、將java代碼中的數(shù)據(jù)庫(kù)和nacos地址都改為yml文件中的服務(wù)地址
3、在每個(gè)微服務(wù)的pom文件中都加上打包依賴
4、清理緩存
5、打包
6、在target目錄中找到j(luò)ar包,并拷貝到對(duì)應(yīng)目錄
7、進(jìn)入虛擬機(jī),將cloud-demo文件夾導(dǎo)入tmp
8、進(jìn)入cloud-demo文件并運(yùn)行
(一)鏡像命令
一、拉取Nginx
docker pull nginx
二、查看鏡像
docker images
三、導(dǎo)出文件
docker save -o nginx.tar nginx:latest
四、刪除鏡像
docker rmi 名字:版本 或 ID
五、加載鏡像
docker load -i nginx.tar
(二)容器命令
注:
暫停時(shí),操作系統(tǒng)會(huì)將容器掛起;(可以恢復(fù))
停止時(shí),操作系統(tǒng)會(huì)將容器刪除;(無法恢復(fù))
所以不使用unstop;
一、例子:運(yùn)行一個(gè)nginx容器
1、輸入運(yùn)行命令
docker run --name containerName -p 80:80 -d nginx
- docker run :創(chuàng)建并運(yùn)行一個(gè)容器
- --name:給容器起一個(gè)名字,比如叫做mn
- -p︰將宿主機(jī)端口與容器端口映射,冒號(hào)左側(cè)是宿主機(jī)端口,右側(cè)是容器端口
- -d:后臺(tái)運(yùn)行容器
- nginx:鏡像名稱,例如nginx
注意:
此命令會(huì)創(chuàng)建一個(gè)宿主機(jī)80端口和容器80端口的映射,當(dāng)訪問宿主機(jī)80端口時(shí),請(qǐng)求會(huì)映射到容器的80端口,從而實(shí)現(xiàn)容器的訪問。
2、使用命令查看宿主機(jī)ip
ifconfig
3、在外部瀏覽器訪問
4、查看日志
docker logs -f 容器名 //跟蹤日志輸出docker logs 容器名 //日志
二、例子:修改nginx的index.html文件
1、進(jìn)入容器
docker exec -it mn bash
- docker exec :進(jìn)入容器內(nèi)部,執(zhí)行一個(gè)命令
- -it:給當(dāng)前進(jìn)入的容器創(chuàng)建一個(gè)標(biāo)準(zhǔn)輸入、輸出終端,允許我們與容器交互
- mn :要進(jìn)入的容器的名稱
- bash:進(jìn)入容器后執(zhí)行的命令,bash是一個(gè)linux終端交互命令
2、進(jìn)入HTML所在目錄
cd /usr/share/nginx/html
3、修改內(nèi)容
sed -i 's#Welcome to nginx#修改了這里#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html
4、在網(wǎng)頁(yè)查看
5、停止容器
docker stop mynginx
6、重啟容器
docker restart mynginxdocker start mynginx
7、刪除容器
docker rm mynginx //刪除docker rm -f mynginx //強(qiáng)制刪除
8、展示容器
docker ps //展示運(yùn)行中容器docker ps -a //展示所有容器
三、例子:創(chuàng)建并運(yùn)行一個(gè)redis容器,并實(shí)現(xiàn)數(shù)據(jù)持久化
1、使用命令運(yùn)行redis容器
docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes
2、進(jìn)入容器,并執(zhí)行redis-cli客戶端命令,存入num=666
docker exec -it redis bash
redis-cli
set num 666
3、查看是否成功
get num
注:也可以直接進(jìn)入redis
docker exec -it redis redis-cli
四、數(shù)據(jù)卷
1、傳統(tǒng)數(shù)據(jù)和容器耦合
2、使用數(shù)據(jù)卷解決問題
- 在上圖中,數(shù)據(jù)存儲(chǔ)在宿主機(jī)的文件系統(tǒng)中,不會(huì)因?yàn)槿萜鞯膭h除而刪除;
- 而且同一份數(shù)據(jù)可以被多個(gè)容器所使用,實(shí)現(xiàn)數(shù)據(jù)共享;
- 在宿主機(jī)中更容易修改配置,且容易升級(jí)和維護(hù);
3、基本操作
4、數(shù)據(jù)卷的作用
將容器與數(shù)據(jù)分離,解耦合,方便操作容器內(nèi)數(shù)據(jù),保證數(shù)據(jù)安全
五、例子:創(chuàng)建一個(gè)數(shù)據(jù)卷,并查看數(shù)據(jù)卷在宿主機(jī)的目錄位置
1、使用命令創(chuàng)建數(shù)據(jù)卷
docker volume create html
2、查看是否創(chuàng)建成功
docker volume ls
3、查看詳細(xì)信息
docker inspect html
4、刪除未使用的卷
docker volume prune
六、例子:掛載數(shù)據(jù)卷
1、創(chuàng)建nginx容器并掛載
docker run --name mynginx -p 80:80 -v html:/usr/share/nginx/html -d nginx
2、查看數(shù)據(jù)卷詳細(xì)信息
docker inspect html
3、復(fù)制文件位置,在Moba中找到文件
4、右鍵選擇使用VSCode打開,并修改
5、在網(wǎng)頁(yè)中查看
注意:
若掛載時(shí),數(shù)據(jù)卷不存在,docker會(huì)自動(dòng)幫你生成;
七、例子:創(chuàng)建并運(yùn)行一個(gè)MySQL容器,將宿主機(jī)目錄直接掛載到容器
1、下載或?qū)雖ysql鏡像
docker pull mysql //下載docker load -i mysql.tar //導(dǎo)入
2、創(chuàng)建目錄
mkdir -p mysql/datamkdir -p mysql/conf
3、在conf中創(chuàng)建配置文件并編寫
vi ms.cnf
[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
4、創(chuàng)建容器并掛載
docker run \--name mysql \-e MYSQL_ROOT_PASSWORD=123 \-p 3306:3306 \-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \-v /tmp/mysql/data:/var/lib/mysql \-d \mysql:5.7.25
第一個(gè)-v,前面是宿主機(jī)配置文件位置,后面是容器配置文件位置;
第二個(gè)-v,前面是宿主機(jī)數(shù)據(jù)文件位置,后面是容器數(shù)據(jù)文件位置;
5、在navicat創(chuàng)建連接
6、總結(jié)
八、自定義鏡像
鏡像是分層結(jié)構(gòu),每一層稱為一個(gè)Layer:
- Baselmage層:包含基本的系統(tǒng)函數(shù)庫(kù)、環(huán)境變量、文件系統(tǒng)
- Entrypoint: 入口,是鏡像中應(yīng)用啟動(dòng)的命令
- 其它:在Baselmage基礎(chǔ)上添加依賴、安裝程序、完成整個(gè)應(yīng)用的安裝和配置
?
詳情查看官網(wǎng)
九、例子:基于Ubuntu鏡像構(gòu)建一個(gè)新的鏡像,運(yùn)行一個(gè)java項(xiàng)目
1、創(chuàng)建docker-demo目錄和Dockerfile文件,并在其中編寫如下
# 指定基礎(chǔ)鏡像
FROM ubuntu:16.04
# 配置環(huán)境變量,JDK的安裝目錄
ENV JAVA_DIR=/usr/local# 拷貝jdk和java項(xiàng)目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar# 安裝JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 配置環(huán)境變量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin# 暴露端口
EXPOSE 8090
# 入口,java項(xiàng)目的啟動(dòng)命令
ENTRYPOINT java -jar /tmp/app.jar
2、向docker-demo中導(dǎo)入文件
3、輸入命令,創(chuàng)建鏡像
docker build -t javaweb:1.0 .
// 鏡像名 版本 所在目錄
4、創(chuàng)建容器
docker run --name web -p 8090:8090 -d javaweb:1.0
5、在頁(yè)面訪問
十、例子:使用alpine創(chuàng)建鏡像
1、修改dockerfile
# 指定基礎(chǔ)鏡像
FROM openjdk:8-alpine# 配置環(huán)境變量,JDK的安裝目錄
COPY ./docker-demo.jar /tmp/app.jar# 暴露端口
EXPOSE 8090# 入口,java項(xiàng)目的啟動(dòng)命令
ENTRYPOINT java -jar /tmp/app.jar
2、構(gòu)建鏡像
docker build -t javaweb:2.0 .
這個(gè)可以少幾個(gè)步驟
十一、DockerCompose
1、作用:
- Docker Compose可以基于Compose文件幫我們快速的部署分布式應(yīng)用,而無需手動(dòng)一個(gè)個(gè)創(chuàng)建和運(yùn)行容器!
- Compose文件是一個(gè)文本文件,通過指令定義集群中的每個(gè)容器如何運(yùn)行。
?
十二、部署微服務(wù)集群
1、編寫docker-compose.yml文件
version: "3.2"services:nacos:image: nacos/nacos-serverenvironment:MODE: standaloneports:- "8848:8848"mysql:image: mysql:5.7.25environment:MYSQL_ROOT_PASSWORD: 123volumes:- "$PWD/mysql/data:/var/lib/mysql"- "$PWD/mysql/conf:/etc/mysql/conf.d/"userservice:build: ./user-serviceorderservice:build: ./order-servicegateway:build: ./gatewayports:- "10010:10010"
2、將java代碼中的數(shù)據(jù)庫(kù)和nacos地址都改為yml文件中的服務(wù)地址
3、在每個(gè)微服務(wù)的pom文件中都加上打包依賴
<build><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
4、清理緩存
5、打包
6、在target目錄中找到j(luò)ar包,并拷貝到對(duì)應(yīng)目錄
7、進(jìn)入虛擬機(jī),將cloud-demo文件夾導(dǎo)入tmp
8、進(jìn)入cloud-demo文件并運(yùn)行
docker-compose up -d