docker的常用命令
#执行docker程序
service docker start
#关闭docker程序
service docker start
#查看docker镜像
docker images
#查看docker版本
docker version
#拉取nginx镜像
docker pull nginx
查看有哪些docker容器在运行
docker ps
#删除 sc-nginx-1 容器
root@docker \~\]# docker rm sc-nginx-1 sc-nginx-1 ### **#移除** **sc-nginx-1** **镜像** \[root@docker \~\]# docker rmi sc-nginx-1 sc-nginx-1 ### **#查看docker的状态** docker stats ## **##镜像的导入导出** * **静态镜像** **:** * 导出:docker save -o 文件名.tar 镜像名称 #docker save 用于将 Docker 镜像保存到文件中。 docker save -o scbusybox1.tar scbusybox:1.0 * 导入:docker load -i 文件名.tar #docker load 用于从文件加载镜像到 Docker 中。 \[root@docker Dockerfile\]# docker load -i scbusybox1.tar * **动态镜像:** * 导出:docker export -o 容器名 文件名.tar #导出正在运行的容器里的文件系统成一个归档文档 docker export -o my_nginx.tar my_nginx * 导入:cat \<文件名.tar\> \| docker import - \<镜像名称:标签\> - 表示标准输入 ### **# start开启docker 容器** docker start sc-nginx-1 ## **#run创建-启动容器** \[root@docker \~\]# docker run --name sc-nginx-1 -p 8080:80 -d --cpu-shares 10 --cpu-shares 2 --cpuset-cpus 0 -m 10000000 nginx 宿主机: 虚拟机 容器跑在宿主机里 docker run 启动容器 --name sc-nginx-1 指定名字 -p 8080:80 指定端口映射 8080是宿主机(本机)的端口 后面的80是容器的端口 -d 将容器放到后台运行 daemon 守护进程 --cpu-shares 10 docker将整个cpu资源的算力当做1,分为1000m份 无论你有几个cpu,多少核心都当做1,然后分配成1000份 10 100 --cpus 1 指定只能使用1个cpu核心 --cpuset-cpus 0 指定在哪个cpu核心里运行 -m 10000000 指定可以使用的内存 memory 默认单位的字节 -c, --cpu-shares int CPU shares (relative weight) --cpus decimal Number of CPUs --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1) ##跑的python docker run -it --rm --name sc-python3-1 python:3 --rm 当我们退出容器的时候,自动删除容器 remove --it 当进入容器的时候开启一个终端,可以输入内容 interactive terminal ## **#进入交互式模式镜像** docker exec -it xie-centos-2 /bin/bash ### **#查看镜像的资源使用率** docker stats ### **#查找镜像源--》下载镜像** docker search go ### **#启动golang 的镜像** \[root@docker \~\]# docker run -it --rm --name sc-golang-1 golang ### **#进入mysql 的镜像** \[root@docker \~\]# docker exec -it cf703956bfa3 bash bash-4.2# ### **#docker run =docker pull 、create 、start** ### **#查看日志logs** \[root@docker \~\]# docker logs sc-mysql-1 ### **#进入容器 exec** \[root@wangyong cgroup\]# docker exec -it sc-nginx-1 bash ### **#查看容器的信息 inspect** \[root@wangyong cgroup\]# docker inspect sc-nginx-1 ## **Docker0 网卡** **-** **桥接网络接口** 作用: 容器之间 容器和宿主机之间 容器和外部网络之间 ## **#docker cp** **-》容器和主机之间的文件传输** 要将本地文件复制到运行中的容器中,可以使用以下命令: docker cp /file.txt container_id:/file.txt 要将容器中的文件复制到本地主机上,可以使用以下命令: docker cp container_id:/containerfile.txt /file.txt ## **#查看当前bash进程关联的Namespace** ls -l /proc/$$/ns ### **#namesplace-cgroups**  ##必看docker资料 cgroup 和 nameplace [++++https://mp.weixin.qq.com/s?__biz=Mzg2MDc2OTYxMQ==\&mid=2247484310\&idx=1\&sn=4acce4911c86676bd15a7445729e6740\&chksm=ce201fb2f95796a44cc0d2da4360deb62d5a84393e0e7fdc507bfcc02b1c1b63b9f8f7dff7a2\&mpshare=1\&scene=23\&srcid=01094gEzrpgdzwxsNbIxgfiw\&sharer_shareinfo=39826d4ea509d1bd8a28b653c2b436d0\&sharer_shareinfo_first=39826d4ea509d1bd8a28b653c2b436d0#rd++++](#rd) [++++https://mp.weixin.qq.com/s?__biz=MzIxMTgzMjE4Mw==\&mid=2247499272\&idx=1\&sn=81f3a5cfb854c9bed904869cdc54afa3\&chksm=974de210a03a6b066a1b021e1435d5793cfe29efba64d4b1065b3b557cd731b3422415a2964d\&mpshare=1\&scene=23\&srcid=0109kdBACwepnMyfUCziNuFx\&sharer_shareinfo=f923cfd46568c2ddf4cb5c1c69044292\&sharer_shareinfo_first=f923cfd46568c2ddf4cb5c1c69044292#rd++++](#rd) ## **#查看docker容器详情(网络)** \[root@docker wangtest\]# docker network inspect sc-net ### **#查看卷volume -\>数据的存放文件夹** \[root@docker \~\]# docker volume ls DRIVER VOLUME NAME local 23ff1b21ba93b8ab6d8a3897130dcb14aaa0cf1431953713b6b0131585696313 ## **#执行容器挂载** ### **#** **--mount** \[root@docker \~\]# docker run -d --name wangguangtest --mount source=my-vol,target=/app nginx:lates ### **#-v的详细介绍** \[root@docker _data\]# docker run -d --name wangguangtest4 -v my-vol:/app nginx:latest 00c28032ad35b564f58f8d9b28154528f93e3c25ca0c289bc8815f4922169594 docker run: 运行一个 Docker 容器。 -d: 指定容器在后台以守护进程模式(detached mode)运行。 --name wangguangtest4: 将该容器命名为 "wangguangtest4",方便后续对容器的管理。 -v my-vol:/app: 将名为 "my-vol" 的卷挂载到容器内的 "/app" 目录。这样做可以实现数据持久化,容器内的 "/app" 目录中的数据将存储在名为 "my-vol" 的卷中。 nginx:latest: 使用 nginx 镜像的最新版本作为容器的基础镜像。 ### **Bind mounts** **--》直接挂载到系统文件分区上** --mount和-v都是在文件系统(磁盘)里面找到对应的docker 容器分区 ### **#限制只读readonly** docker run -d -it --name devtest --mount type=bind,source="$(pwd)"/target,target=/app,readonly nginx:latest ### **#卷的作用** 解决容器和容器之间的数据共享 解决容器和宿主机之间的文件共享 ## **#存储服务器NSA、CDN、SAN** NAS(Network Attached Storage)服务器是一种专门用于存储和共享文件的设备,通常连接到网络中以便多台设备可以访问其中的数据 CDN(Content Delivery Network)即内容分发网络,是一种通过部署位于全球各地的服务器节点来提高互联网内容传输速度和用户访问体验的服务。 SAN(Storage Area Network)即存储区域网络,是一种专门用于数据存储的高速网络架构。 ## **#NFS** NFS(Network File System)是一种允许网络上的计算机之间分享文件系统的协议 ## **#基于busybox制作镜像** \[root@docker Dockerfile\]# docker build -t scbusybox:1.0 . \[+\] Building 18.2s (8/8) FINISHED docker:default =\> \[internal\] load build definition from Dockerfile 0.0s =\> =\> transferring dockerfile: 626B 0.0s =\> \[internal\] load metadata for docker.io/library/busybox:lat 5.4s =\> \[internal\] load .dockerignore 0.0s =\> =\> transferring context: 2B 0.0s =\> \[internal\] load build context 0.0s =\> =\> transferring context: 754B 0.0s =\> \[1/4\] FROM docker.io/library/busybox:latest@sha256:650fd57 2.2s =\> =\> resolve docker.io/library/busybox:latest@sha256:650fd57 0.0s =\> =\> sha256:650fd573e056b679a5110a70aabeb01e 6.76kB / 6.76kB 0.0s =\> =\> sha256:4be429a5fbb2e71ae7958bfa558bc637cf3a 610B / 610B 0.0s =\> =\> sha256:ba5dc23f65d4cc4a4535bce55cf9e63b068e 372B / 372B 0.0s =\> =\> sha256:7b2699543f22d5b8dc8d66a5873eb246 2.15MB / 2.15MB 2.0s =\> =\> extracting sha256:7b2699543f22d5b8dc8d66a5873eb246767bc 0.1s =\> \[2/4\] COPY . / 0.0s =\> \[3/4\] RUN touch sc.txt \&\& mkdir sanchuang \&\& sleep 10 10.4s =\> exporting to image 0.0s =\> =\> exporting layers 0.0s =\> =\> writing image sha256:e6cae04f1407b58b760b62db3122696cf9 0.0s =\> =\> naming to docker.io/library/scbusybox:1.0 0.0s ### **#制作文件** \[root@docker Dockerfile\]# cat Dockerfile #指定基础镜像 FROM busybox #指定进入容器的时候,进入哪个文件夹 docker exec 能看到效果 WORKDIR / #复制宿主机当前目录下的所有文件和文件夹到容器里的/目录下 docker cp COPY . / #制作镜像的时候,需要执行的命令,这些文件会留着做好的镜像里--\>是在制\>作容器的过程中的操作系统里运行的,在制作镜像的过程中会产生临时的容器 RUN touch sc.txt \&\& mkdir sanchuang \&\& sleep 10 #指定容器启动的时候需要执行的命令 #/bin/sh while.sh ENTRYPOINT \["/bin/sh","/while.sh"
#基于go语言制作镜像
案例2: 使用go语言的编译好的代码制作镜像
root@scdocker Dockerfile\]# ls Dockerfile while.sh \[root@scdocker Dockerfile\]# mkdir shell \[root@scdocker Dockerfile\]# ls Dockerfile shell while.sh \[root@scdocker Dockerfile\]# mv while.sh Dockerfile shell/ \[root@scdocker Dockerfile\]# ls shell \[root@scdocker Dockerfile\]# mkdir go \[root@scdocker Dockerfile\]# ls go shell \[root@scdocker Dockerfile\]# cd go \[root@scdocker go\]# pwd /Dockerfile/go \[root@scdocker go\]# 2.1 获得go语言程序的核心代码,编写的一个简单的web服务器代码server.go \[root@scdocker go\]# pwd /Dockerfile/go \[root@scdocker go\]# ls apiserver.tar.gz \[root@scdocker go\]# \[root@scdocker go\]# vim server.go package main //server.go是主运行文件 import ( "net/http" "github.com/gin-gonic/gin" ) //gin--\>go中的web框架 //入口函数 func main(){ //创建一个web服务器 r:=gin.Default() // 当访问/sc=\>返回{"message":"hello, sanchuang"} r.GET("/",func(c \*gin.Context){ //200,返回的数据 c.JSON(http.StatusOK,gin.H{ "message":"hello,sanchuanger 2024 nice", }) }) //运行web服务 r.Run() } \[root@scdocker go\]# 安装go语言的环境 \[root@scdocker yum.repos.d\]# yum install epel-release -y \[root@scdocker yum.repos.d\]# yum install golang -y 在宿主机里开始编译server.go成一个二进制文件 \[root@scdocker yum.repos.d\]# cd /Dockerfile/go/ \[root@scdocker go\]# ls apiserver.tar.gz server.go \[root@scdocker go\]# \[root@scdocker go\]# go env -w GOPROXY=https://goproxy.cn,direct \[root@scdocker go\]# go mod init web \[root@scdocker go\]# go mod tidy 运行代码,默认监听的是8080,这个步骤只是测试我们的server.go能否正常运行 \[root@scdocker go\]# go run server.go \[GIN-debug\] \[WARNING\] Creating an Engine instance with the Logger and Recovery middleware already attached. \[GIN-debug\] \[WARNING\] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) \[GIN-debug\] GET / --\> main.main.func1 (3 handlers) \[GIN-debug\] \[WARNING\] You trusted all proxies, this is NOT safe. We recommend you to set a value. Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details. \[GIN-debug\] Environment variable PORT is undefined. Using port :8080 by default \[GIN-debug\] Listening and serving HTTP on :8080 真正的编译server.go成hnweb二进制文件 \[root@scdocker go\]# go build -o hnweb . \[root@scdocker go\]# ls apiserver.tar.gz go.mod go.sum hnweb server.go \[root@scdocker go\]# hnweb 是我们编译好的二进制程序 \[root@scdocker go\]# ./hnweb \[GIN-debug\] \[WARNING\] Creating an Engine instance with the Logger and Recovery middleware already attached. \[GIN-debug\] \[WARNING\] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) \[GIN-debug\] GET / --\> main.main.func1 (3 handlers) \[GIN-debug\] \[WARNING\] You trusted all proxies, this is NOT safe. We recommend you to set a value. Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details. \[GIN-debug\] Environment variable PORT is undefined. Using port :8080 by default \[GIN-debug\] Listening and serving HTTP on :8080 \[GIN\] 2023/08/11 - 16:53:07 \| 200 \| 6.785225ms \| 192.168.223.1 \| GET "/" \[GIN\] 2023/08/11 - 16:53:07 \| 200 \| 25.458µs \| 192.168.223.1 \| GET "/" \[GIN\] 2023/08/11 - 16:53:07 \| 200 \| 25.421µs \| 192.168.223.1 \| GET "/" \[GIN\] 2023/08/11 - 16:53:07 \| 200 \| 32.671µs \| 192.168.223.1 \| GET "/" \^C \[root@scdocker go\]# 2.编写Dokerfile文件 \[root@scdocker go\]# vim Dockerfile \[root@scdocker go\]# cat Dockerfile FROM centos:7 WORKDIR /go COPY . /go RUN ls /go \&\& pwd ENTRYPOINT \["/go/hnweb"
root@scdocker go\]# 3.制作镜像 \[root@scdocker go\]# docker build -t hnweb:1.0 \[root@scdocker go\]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hnweb 1.0 8fbb96328262 25 seconds ago 221MB scbusybox 1.0 eff749ec3ffc 41 minutes ago 1.24MB mysql 5.7.43 92034fe9a41f 8 days ago 581MB busybox latest beae173ccac6 19 months ago 1.24MB nginx latest 605c77e624dd 19 months ago 141MB golang latest 276895edf967 19 months ago 941MB redis latest 7614ae9453d1 19 months ago 113MB python latest a5d7930b60cc 19 months ago 917MB \[root@scdocker go\]# 4.启动容器使用镜像hnweb \[root@scdocker go\]# \[root@scdocker go\]# docker run -d --name hnweb-1 -p 7788:8080 hnweb:1.0 e92ca716ac94604dc3fcf92202eb0141462dd95a5c3a9e8207188eb4c081234c \[root@scdocker go\]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e92ca716ac94 hnweb:1.0 "/go/hnweb" 4 seconds ago Up 2 seconds 0.0.0.0:7788-\>8080/tcp, :::7788-\>8080/tcp hnweb-1 d38655459dbb nginx "/docker-entrypoint...." 6 hours ago Up 6 hours 0.0.0.0:5588-\>80/tcp, :::5588-\>80/tcp lizx-web-1 \[root@scdocker go\]# 5.去宿主机的浏览器里访问 http://192.168.223.143:7788/ ## **#基于python 制作镜像** ==== 使用python代码来制作镜像 === 第1步:编辑app.py文件,我们的程序文件 \[root@sc-docker-server mydocker\]# vim app.py from flask import Flask from redis import Redis, RedisError import os import socket # Connect to Redis redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2) app = Flask(__name__) @app.route("/") def hello(): try: visits = redis.incr("counter") except RedisError: visits = "\cannot connect to Redis, counter disabled\" html = "\
Hello {name}!\
" \\ "\Hostname:\ {hostname}\" \\ "\Visits:\ {visits}" return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits) if __name__ == "__main__": app.run(host='0.0.0.0', port=80) 第2步:编辑requirements.txt文件 \[root@sc-docker-server mydocker\]# vim requirements.txt Flask Redis 第3步:编辑Dockerfile \[root@sc-docker-server \~\]# mkdir /mydocker/ \[root@sc-docker-server \~\]# cd /mydocker/ \[root@sc-docker-server mydocker\]# \[root@docker python\]# cat Dockerfile FROM python:3.9 WORKDIR /app COPY . /app RUN pip install --trusted-host pypi.python.org -r requirements.txt EXPOSE 80 ENV NAME World ENV AUTHOR cali CMD \["python","app.py"
root@docker python\]# 第4步:生成镜像文件 \[root@docker python\]# docker build -t sc_sayhello:1.0 . \[+\] Building 159.4s (9/9) FINISHED docker:default =\> \[internal\] load build definition from Dockerfile 0.0s =\> =\> transferring dockerfile: 218B 0.0s =\> \[internal\] load .dockerignore 0.0s =\> =\> transferring context: 2B 0.0s =\> \[internal\] load metadata for docker.io/library/python:3.9 6.7s =\> \[1/4\] FROM docker.io/library/python:3.9@sha256:51155b171174dcb535d05b87e739f792e9cc1292c714227d6276b0278607b643 96.5s =\> =\> resolve docker.io/library/python:3.9@sha256:51155b171174dcb535d05b87e739f792e9cc1292c714227d6276b0278607b643 0.0s =\> =\> sha256:51155b171174dcb535d05b87e739f792e9cc1292c714227d6276b0278607b643 1.86kB / 1.86kB 0.0s =\> =\> sha256:3689fc6de1fb539c75e0397401dade00853f80223323d9b63ae2857a51a21633 2.01kB / 2.01kB 0.0s =\> =\> sha256:1b13d4e1a46e5e969702ec92b7c787c1b6891bff7c21ad378ff6dbc9e751d5d4 49.56MB / 49.56MB 20.8s =\> =\> sha256:1c74526957fc2157e8b0989072dc99b9582b398c12d1dcd40270fd76231bab0c 24.05MB / 24.05MB 9.7s =\> =\> sha256:6c98275ba382f148576ece0386055948599024a793487adcd5a667e9be485450 7.51kB / 7.51kB 0.0s =\> =\> sha256:8d55d1cb1ffb0c7e0438b372a96cc0f23a76c21571fa3e7b7b38e3fbc66a8c3a 64.14MB / 64.14MB 18.2s =\> =\> sha256:aa8e0026efede8b3da7364fd0ec879657b2c9be209b5cc1e2ec83bed6dfcf6a9 211.10MB / 211.10MB 46.7s =\> =\> sha256:a000d2c561b3e5538d3abf2f9bb93a61fa101a369efe94eb53d8f3b9e5f385ac 6.39MB / 6.39MB 21.1s =\> =\> sha256:ea0e489eccac14d78ebd8126fe370d653aae4819e2bd429997ab4e53f19be542 15.82MB / 15.82MB 25.7s =\> =\> extracting sha256:1b13d4e1a46e5e969702ec92b7c787c1b6891bff7c21ad378ff6dbc9e751d5d4 8.7s =\> =\> sha256:6f85223502896fcaa9a3b2132d5d84cec61a144025c5180dae502d7b3a3f30b6 244B / 244B 22.1s =\> =\> sha256:cd0448a734b26b5e96572a2b9172b59d0108eb398ceb085c657c9b5309c3244f 2.85MB / 2.85MB 24.3s =\> =\> extracting sha256:1c74526957fc2157e8b0989072dc99b9582b398c12d1dcd40270fd76231bab0c 3.0s =\> =\> extracting sha256:8d55d1cb1ffb0c7e0438b372a96cc0f23a76c21571fa3e7b7b38e3fbc66a8c3a 13.4s =\> =\> extracting sha256:aa8e0026efede8b3da7364fd0ec879657b2c9be209b5cc1e2ec83bed6dfcf6a9 43.8s =\> =\> extracting sha256:a000d2c561b3e5538d3abf2f9bb93a61fa101a369efe94eb53d8f3b9e5f385ac 1.2s =\> =\> extracting sha256:ea0e489eccac14d78ebd8126fe370d653aae4819e2bd429997ab4e53f19be542 2.6s =\> =\> extracting sha256:6f85223502896fcaa9a3b2132d5d84cec61a144025c5180dae502d7b3a3f30b6 0.1s =\> =\> extracting sha256:cd0448a734b26b5e96572a2b9172b59d0108eb398ceb085c657c9b5309c3244f 0.9s =\> \[internal\] load build context 0.0s =\> =\> transferring context: 978B 0.0s =\> \[2/4\] WORKDIR /app 1.4s =\> \[3/4\] COPY . /app 0.1s =\> \[4/4\] RUN pip install --trusted-host pypi.python.org -r requirements.txt 54.2s =\> exporting to image 0.4s =\> =\> exporting layers 0.4s =\> =\> writing image sha256:1c58385cbc650ca2a919525202736bf0617cb7c7f393fd4c61add76dc40455f0 0.0s =\> =\> naming to docker.io/library/sc_sayhello:1.0 0.0s \[root@docker python\]# 完成的镜像,查看下 \[root@docker python\]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE sc_sayhello 1.0 1c58385cbc65 About a minute ago 1.01GB 第5步使用镜像,启动容器 \[root@docker python\]# docker run -d -p 5080:80 --name sc-sayhello-1 sc_sayhello:1.0 3cee16df951fba72b4b6104b685841ec7d55fa47d734d45de9f1c44534b25917 \[root@docker python\]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3cee16df951f sc_sayhello:1.0 "python app.py" 7 seconds ago Up 5 seconds 0.0.0.0:5080-\>80/tcp, :::5080-\>80/tcp sc-sayhello-1 15a97f75f0e3 hnweb:1.0 "/go/hnweb" 3 hours ago Up 3 hours 0.0.0.0:7788-\>8080/tcp, :::7788-\>8080/tcp huweb-1 \[root@docker python\]# 第6步:访问容器的web服务 curl或者chrome浏览器访问 宿主机ip:5080 Hello World! Hostname: f4aeb5d5305a Visits: cannot connect to Redis, counter disabled 因为redis数据库容器没有启动,flask web服务不能连接到redis数据库 第7步: 启动redis容器 docker run -d -p 6379:6379 --name sc-redis-1 redis root@docker python\]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 44b61a3079b2 redis "docker-entrypoint.s..." 7 seconds ago Up 4 seconds 0.0.0.0:6379-\>6379/tcp, :::6379-\>6379/tcp sc-redis-1 第8步: 再次启动一个自己制作镜像的容器,链接到redis容器 \[root@docker python\]# docker run -d -p 5081:80 --name sc-sayhello-2 --link sc-redis-1:redis sc_sayhello:1.0 --link sc-redis-1:redis sc-redis-1 是前面启动的容器的名字 redis 是一个别名 3827b7bf111bed7d0670b48731c8193529630691c346178345260e45be78309f \[root@docker python\]# \[root@docker python\]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3827b7bf111b sc_sayhello:1.0 "python app.py" 13 seconds ago Up 11 seconds 0.0.0.0:5081-\>80/tcp, :::5081-\>80/tcp sc-sayhello-2 44b61a3079b2 redis "docker-entrypoint.s..." 2 minutes ago Up 2 minutes 0.0.0.0:6379-\>6379/tcp, :::6379-\>6379/tcp sc-redis-1 第9步:访问容器的web服务 curl或者chrome浏览器访问 宿主机ip:5081 Hello World! Hostname: aad7da1892b5 Visits: 15 ## **#compose** --》只能管理同一个宿主机容器的软件 执行的时候必须基于在compose.yaml 文件夹下才可以执行docker compose ## **#wordpress--》nginx** 类似于nginx的做网站的软件 ## **#harbor--\>私人仓库** ## **#更新镜像的流程** 1. 代码修改后 2. 进行docker 镜像制作 , 进入含有Dockerfile文件的文件夹 3. 制作docker bulid -t docker-name:版本号 4. docker tag 源docker-name:版本号 标签-name:版本号 5. docekr login 主机号 6. 登录后,docker push 标签-name:版本号 7. 其他主机登录到 本主机号后 ,docker pull 标签-name:版本号 ## **#容器监控的常用命令** ### **CPU** top作用 .cpu 内存 sar安装 yum install sysstat -y ### **memory** top作用 .cpu 内存 free -h #查看内存的 sar ### **network** glances (network,cpu,memory,disk磁盘 ) dstat -am iftop #安装 yum install iftop -y -\>交互式检测网络 nethogs 则可以按进程级别显示网络流量的使用情况 ### **disk** df -Th 查看磁盘分区的使用情况(文件系统 容量 已用 可用 已用% 挂载点) glances (network,cpu,memory,disk磁盘 ) sar -b 1 10 iostat -x ## **#全能命令(网络、内存、CPU、磁盘)** #### **glances** #### **sar** 查看 CPU 使用情况: sar -u 查看内存使用情况: sar -r 查看网络活动情况: sar -n DEV 查看磁盘 I/O 活动情况: sar -b 查看系统负载情况: sar -q 显示指定时间段内的数据(例如,显示过去一小时的数据): sar -s 09:00:00 -e 10:00:00 #### **dstat -am** ## **#docker的安装细节** Docker Engine 是docker的核心软件,是服务器上安装使用的。 安装文档 https://docs.docker.com/engine/install/centos/ https://docs.docker.com/engine/install/ubuntu/ 修改下主机名为docker \[root@localhost \~\]# hostnamectl set-hostname docker \[root@localhost \~\]# su \[root@docker \~\]# 1.卸载原来安装过的docker,如果没有安装可以不需要卸载 yum remove docker \\ docker-client \\ docker-client-latest \\ docker-common \\ docker-latest \\ docker-latest-logrotate \\ docker-logrotate \\ docker-engine 2.安装yum相关的工具,下载docker-ce.repo文件 \[root@cali \~\]# \[root@cali \~\]# yum install -y yum-utils -y \[root@cali \~\]#yum-config-manager \\ --add-repo \\ https://download.docker.com/linux/centos/docker-ce.repo 下载docker-ce.repo文件存放在/etc/yum.repos.d \[root@cali yum.repos.d\]# pwd /etc/yum.repos.d \[root@cali yum.repos.d\]# ls CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo docker-ce.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo CentOS-x86_64-kernel.repo nginx.repo \[root@cali yum.repos.d\]# 3.安装docker-ce软件 container engine 容器引擎 docker是一个容器管理的软件 docker-ce 是服务器端软件 server docker-ce-cli 是客户端软件 client docker-compose-plugin 是compose插件,用来批量启动很多容器,在单台机器上 containerd.io 底层用来启动容器的 docker-compose-plugin 对docker-ce-cli的支持的插件 \[root@cali yum.repos.d\]#yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y \[root@localhost yum.repos.d\]# docker version 查看docker版本 Client: Docker Engine - Community Version: 23.0.1 API version: 1.42 Go version: go1.19.5 Git commit: a5ee5b1 Built: Thu Feb 9 19:51:00 2023 OS/Arch: linux/amd64 Context: default Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? \[root@localhost yum.repos.d\]# 4.启动docker服务 \[root@cali yum.repos.d\]# systemctl start docker \[root@cali yum.repos.d\]# ps aux\|grep docker root 1892 1.4 1.5 1095108 58972 ? Ssl 11:39 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 2029 0.0 0.0 112824 976 pts/0 S+ 11:40 0:00 grep --color=auto docker \[root@cali yum.repos.d\]# 查看启动后的进程 \[root@docker yum.repos.d\]# sudo systemctl start docker \[root@docker yum.repos.d\]# ps aux\|grep docker root 8584 0.4 0.6 1116960 50368 ? Ssl 11:14 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 8733 0.0 0.0 112824 980 pts/0 S+ 11:15 0:00 grep --color=auto docker \[root@docker yum.repos.d\]# 5.设置docker服务开机启动 \[root@cali yum.repos.d\]# systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. \[root@cali yum.repos.d\]# 6.关闭firewalld服务和selinux \[root@docker yum.repos.d\]# service firewalld stop Redirecting to /bin/systemctl stop firewalld.service \[root@docker yum.repos.d\]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. \[root@docker yum.repos.d\]# \[root@docker yum.repos.d\]# vi /etc/selinux/config SELINUX=disabled 7.重启linux系统 \[root@docker yum.repos.d\]# reboot docker启动的每一个容器背后就是一个linux进程 \[root@cali yum.repos.d\]# docker ps 查看有哪些docker容器在运行 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES \[root@cali yum.repos.d\]# \[root@cali yum.repos.d\]# docker images 查看镜像 REPOSITORY TAG IMAGE ID CREATED SIZE \[root@cali yum.repos.d\]# 安装docker软件的机器叫宿主机 寄宿 使用docker容器启动软件,颠覆了我们安装软件的方式 常见的应用软件都可以使用docker容器去启动 常见的应用软件都有对应的镜像(镜像是人制作出来的) http://hub.docker.com/ 是docker官方提供的镜像的下载网站,里面有很多的镜像--》全球最大的镜像文件集散地。 容器: container ## **#负载均衡** 负载均衡:lvs 四层:ip+port ingress: 负载均衡--》一般是做七层负载均衡 nginx:七层负载均衡:http 四层:ip+port ## **#metrics和cadvisor** 都是进行性能监控容器的工具 可以收集数据,分析,监控 ## **#压力测试工具** mysql: sysbench docker+k8s: hpa-example