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
#查看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
import (
"net/http"
)
//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.去宿主机的浏览器里访问
#基于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 = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {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-->私人仓库
#更新镜像的流程
- 代码修改后
- 进行docker 镜像制作 , 进入含有Dockerfile文件的文件夹
- 制作docker bulid -t docker-name:版本号
- docker tag 源docker-name:版本号 标签-name:版本号
- docekr login 主机号
- 登录后,docker push 标签-name:版本号
- 其他主机登录到 本主机号后 ,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