文章目錄
- 前言
- 一、docker
- 1.1 為什么有docker
- 1.2 docker架構
- 1.3 docker 安裝
- 1.4 docker中央倉庫
- 1.5 docker 基本指令
- 1.6 docker數據卷,掛載
- 例:nginx 數據卷掛載
- 例:mysql 本地持久化
- 1.7 鏡像制作
- 鏡像結構
- dockerfile基礎指令
- 容器生成鏡像
- 1.8 docker 網絡
- 1.9 部署案例
- 前端部署
- 后端部署
前言
市電子信息產業鏈勞動和技能競賽,以賽促學備戰筆記,因對微服務容器框架不熟,浪費大多時間在找配置文件中.也榮幸獲得三等獎
容器化
一、docker
考慮podman的生態不足,2024年7月重新整理docker
請參考2019年docker筆記 容器docker簡介及基本命令
1.1 為什么有docker
1.2 docker架構
1.3 docker 安裝
docker 官網:https://www.docker.com/ 點擊doc文檔
菜鳥教程:https://www.runoob.com/docker/centos-docker-install.html
# CentOS 7
# 移除舊版本docker
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 配置docker yum源。
sudo yum install -y yum-utils # yum-utils是一個提供額外功能的工具集,#用于管理YUM(Yellowdog Updater, Modified)軟件包管理器。sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 可在/etc/yum.repos.d/ 中查看增加的# 安裝 最新 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 啟動& 開機啟動docker; enable + start 二合一
systemctl enable docker --now# 配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info
查看使用registy倉庫。
Docker中,默認情況下鏡像和容器的存儲位置是/var/lib/docker。
將默認的存儲路徑修改為新的存儲路徑:
vim /etc/docker/daemon.json
。在配置文件中添加以下內容:{“data-root”:”/mnt/docker”}
centos 8 兼容按centos7安裝
在centos8中,dnf install docker
1.4 docker中央倉庫
1.docker的官方中央倉庫:這個鏡像是最全的,但是下載速度最慢。
https://hub.docker.com/
2.國內的鏡像網站:網易數帆, daocloud, … http://c.163.com/hub
http://hub.daocloud.io/ 不需要登錄 (推薦使用)
1.5 docker 基本指令
我們來看一個案例,以提供感性認識并加深理解。
安裝mysql容器案例,-e參數需到發布鏡像網查看配置文檔。
docker run -itd --name mysql-test -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql
#-i interactive交互,-t tty終端,-d detach
docker run -d --name nginx -p 801:80 nginx:1.14.1
雖然我們能快速掌握案例,但不應忽視厚積薄發的理念
鏡像基本命令
docker pull nginx #拉取鏡像
docker images # 查看鏡像
# 鏡像打包
docker save --help
docker save -o nginx.tar nginx:latest
# 刪鏡像
docker rmi nginx
# 壓縮包加載鏡像
docker load -i /opt/nginx.tar
容器基本命令
#創建容器
docker run -d --name nginx_r -p 801:80 nginx
#查看容器
docker ps -a
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Names}}\t{{.Status}}"
#可在~./bashrc 中使用別名快捷
#容器交互 需要容器中/bin/bash
docker exec -it nginx /bin/bash
# 停容器nginx
docker stop nginx
# 重新啟動容器nginx
docker start nginx
#查看容器日志
docker logs nginx
1.6 docker數據卷,掛載
由于容器只包含應用程序和其依賴項,它們通常不包含一個完整的開發環境,例如文本編輯器vi或編譯器。因此,如果你需要在容器中編輯文件,你需要使用數據卷(volume)來將主機系統上的文件或目錄掛載到容器中。
例:nginx 數據卷掛載
#使用docker volume 創建,查看卷
docker volume --help
#!注意刪掉容器,數據卷對應關系依然存在
# 創建run時 使用數據卷
docker run -d --name nginx -p 801:80 -v html:/usr/share/nginx/html nginx
docker run -d --name nginx -p 801:80 -v html:/usr/share/nginx/html -v config:/etc/nginx/ nginx#查看容器卷宿主機路徑
docker volume inspect html
docker volume inspect html configcd /var/lib/docker/volumes/html/_data
宿主機目錄和容器目錄掛載,將宿主機目錄改為數據卷名。
-v mysql:/var/lib/mysql # 識別為一個數據卷叫mysql
-v ./mysql:/var/lib/mysql #識別為當前目錄下的mysql
例:mysql 本地持久化
官網文檔:https://hub.docker.com/_/mysql查詢鏡像配置
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tagdocker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql
命令:
#從容器里面拷文件到宿主機
#docker cp testtomcat:/usr/local/tomcat/webapps /opt
#從宿主機拷文件到容器里面
docker cp activity.sql 8300a06b704b:/opt/
#使用source命令數據恢復
mysql -uroot -p123456
>source /opt/activity.sql ;
>exit;exit;
>#刪容器
docker rm mysql -f
# 重新掛載,數據仍然存在
docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql
#重新掛載,數據仍然存在
1.7 鏡像制作
鏡像結構
dockerfile基礎指令
docker build -t imag:tag .
容器生成鏡像
docker run -d -p 8081:8081 \
-v /home/xiaotang0711/Desktop/docker/hadoop.jar:/usr/hadoop.jar \
--name springboot java:8u111 \
java -jar /usr/hadoop.jar#或copy 從宿主機到容器
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
# 生成一個新的鏡像
docker commit 4eb13e778da3 centos:7-ssh
1.8 docker 網絡
因ip隨機不穩定,通過自建網絡,可以通過容器名連接.
#創建網絡
network create lih
#查看網絡
docker network ls
#查看容器網絡
docker inspect 625ec79eee83 |grep IPAddress
#添加網絡到容器
docker network connect --help
docker network connect lih 625ec79eee83
#再查看
docker inspect 625ec79eee83 |grep IPAddress#可以創建容器的時候添加網絡
1.9 部署案例
# 生成基礎鏡像
docker load -i nginx.tar
#添加網絡
docker network create lihnet
前端部署
需求:創建一個新的nginx容器,nginx.conf,html 目錄與容器掛載。
#數據卷
#會自動本地生成目錄文件
docker run -d --name nginx --network lihnet -p 802:80 -v html:/usr/share/nginx/html -v config:/etc/nginx/ nginx
docker volume inspect html config
#2或目錄掛載
#!注意把賦值的nginx.conf到/home/nginx/html中注意把不存在的文件去掉
docker run -d --name nginx --network lihnet -p 802:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/config:/etc/nginx/ nginx#3或文件對文件推薦使用
docker run -d --name nginx --network lihnet -p 802:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/config/nginx.conf:/etc/nginx/nginx.conf nginx#4或使用默認配置文件
docker run -d --name nginx --network lihnet -p 802:80 -v /home/nginx/html:/usr/share/nginx/html nginxdocker exec -it nginx /bin/bash
#制作鏡像
docker commit 78a96dd818af nignjingx
#重新生成
docker run -d -p 802:80 --name nginx2 --network lihnet nignjingx
dockerfile方式
vim dockerfile
......
# 基礎鏡像使用Nginx
FROM nginx
# 添加時區環境變量,亞洲,上海
ENV TimeZone=Asia/Shanghai
# 將前端dist文件中的內容復制到nginx目錄
COPY dist /usr/share/nginx/html/
# 用本地的nginx配置文件覆蓋鏡像的Nginx配置
COPY default.conf /etc/nginx/conf.d
# 暴露端口
EXPOSE 80
......
后端部署
應用程序
dockerfile方式
vim dockerfile
.....
FROM java:8
COPY *.jar /app.jar
EXPOSE 8080 #不使用expose指令,則鏡像的用戶無法從dockerfile直接了解到應用默認監聽的端口
ENTRYPOINT ["java","-jar","app.jar"]
......
docker build -t api .
docker run -d --name javahtml -p 8080:8080 --network lihnet api
基礎鏡像java
#或基礎鏡像java生成容器docker run -d -p 8080:8080 -v /opt/depos.jar:/usr/depos.jar --name javajar java java -jar /usr/depos.jar
mysql
docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql#mysql
# 創建用戶和密碼
create user tom@'%' identified by 'ttt';
#賦予權限
grant all on *.* to root@'%' identified by '123456';create database shop;
use shop;
source /var/lib/mysql/book.sql;