docker学习

server/2024/10/20 13:52:05/

一、centos安装docker

本实验是以centos操作系统。

# 移除旧版本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
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装 最新 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://mirror.ccs.tencentyun.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker# 使用命令查看是否正确启动
docker ps

二、使用docker部署nginx

使用docker部署nginx,修改主页,进行发布。

(1)下载镜像

相关命令

# 检索
docker search nginx # 这个命令我在腾讯云服务器上执行,获取不到结果,弄了半天也没弄好
# 下载
docker pull
# 列表
docker images
# 删除
docker rmi
(2)启动容器

相关命令

# 运行
docker run
# 查看
docker ps -a
# 停止
docker stop
# 启动
docker start
# 重启
docker restart
# 状态
docker stats
# 日志
docker logs
# 进入
docker exec
# 删除
docker rm
# 后台启动
docker run -d --name mynginx -p 80:80 nginx
# 交互进入容器
docker exec -it mynginx bash
# 进入到指定目录
cd /usr/share/nginx/html
# 修改index.html
(3)保存镜像

相关命令

# 提交
docker commit
# 保存
docker save -o mynginx.tar mynginx:v1.0
# 加载
docker load -i mynginx.tar
(4)分享社区
# 登录
docker login
# 打标签
docker tag oldname yourname/newname
# 推送
docker push yourname/newname

 使用卷映射启动

docker run -d --name app03 -p 90:80 -v ngconf:/etc/nginx -v /app/nghtml:/usr/share/nginx/html nginx

使用卷映射,可以避免在使用目录映射时,由于外部目录为空,导致映射到容器内部也为空,使得容器启动失败。当然,可以先在外部建立好相关映射目录和文件,再使用目录映射。另外一种方法是使用卷映射,卷映射也是使用-v参数,但是不同点是卷映射不以"/"开头,而是直接使用自定义的卷名。映射之后,这个卷名在外部/var/lib/docker/volumes目录下。可以理解为使用目录映射时,容器内部以外部目录为准,使用卷映射时,外部目录以容器内部目录为准。

查看所有卷:

docker volume ls

查看卷的详情

docker volume inspect volumename

 查看某个容器的细节

docker container inspect [app01]

通过上面的命令,可以看到指定容器在内部的网络地址。

创建网络

docker network create mynet

列出网络

docker network ls

 启动容器,加入自定义网络

docker run -d -p 80:80 --name app02 --network mynet nginx

绑定自定义的网络之后,就可以使用容器名进行稳定的访问

# 进入容器
docker exec -it app02 bash
curl http://app02:80

三、redis主从同步集群

 使用如下镜像bitnima/redis

使用bitnami创建容器创建主节点master:

docker run -d -p 6379:6379 -v /app/rd1:/bitnami/redis/data -e REDIS_REPLICATION_MODE=master -e REDIS_PASSWORD=123456 --network mynet --name redis01 bitnami/redis

 创建完之后,使用docker ps -a 发现没有正常运行

[root@VM-24-5-centos ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                   CREATED          STATUS                      PORTS                               NAMES
50cdd220d951   bitnami/redis   "/opt/bitnami/script…"   48 seconds ago   Exited (1) 47 seconds ago                                       redis01
981cb63c6752   mynginx:v1.0    "/docker-entrypoint.…"   45 minutes ago   Up 45 minutes               0.0.0.0:80->80/tcp, :::80->80/tcp   app02

查看容器的日志

[root@VM-24-5-centos ~]# docker logs 50c
redis 16:20:05.04 INFO  ==>
redis 16:20:05.04 INFO  ==> Welcome to the Bitnami redis container
redis 16:20:05.04 INFO  ==> Subscribe to project updates by watching https://github.com/bitnami/containers
redis 16:20:05.04 INFO  ==> Submit issues and feature requests at https://github.com/bitnami/containers/issues
redis 16:20:05.04 INFO  ==> Upgrade to Tanzu Application Catalog for production environments to access custom-configured and pre-packaged software components. Gain enhanced features, including Software Bill of Materials (SBOM), CVE scan result reports, and VEX documents. To learn more, visit https://bitnami.com/enterprise
redis 16:20:05.04 INFO  ==>
redis 16:20:05.04 INFO  ==> ** Starting Redis setup **
redis 16:20:05.06 INFO  ==> Initializing Redis
redis 16:20:05.06 INFO  ==> Setting Redis config file
redis 16:20:05.08 INFO  ==> Configuring replication mode
redis 16:20:05.10 INFO  ==> ** Redis setup finished! **redis 16:20:05.11 INFO  ==> ** Starting Redis **
1:C 27 Sep 2024 16:20:05.126 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:C 27 Sep 2024 16:20:05.126 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 27 Sep 2024 16:20:05.126 * Redis version=7.4.0, bits=64, commit=00000000, modified=1, pid=1, just started
1:C 27 Sep 2024 16:20:05.126 * Configuration loaded
1:M 27 Sep 2024 16:20:05.126 * monotonic clock: POSIX clock_gettime
1:M 27 Sep 2024 16:20:05.127 * Running mode=standalone, port=6379.
1:M 27 Sep 2024 16:20:05.127 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 27 Sep 2024 16:20:05.127 * Server initialized
1:M 27 Sep 2024 16:20:05.127 # Can't open or create append-only dir appendonlydir: Permission denied

 大概的意思就是所映射的文件夹该容器没有权限访问,将映射到主机的目录的权限进行修改。

chmod -R 777 /app

 重新启动

docker restart 50c

 再次查看,发现容器正常启动了。

接下来,启动从节点slave:

docker run -d -p 6380:6379 -v /app/rd1:/bitnami/redis/data -e REDIS_REPLICATION_MODE=slave -e REDIS_MASTER_HOST=redis01 -e REDIS_MASTER_PORT_NUMBER=6379 -e REDIS_MASTER_PASSWORD=123456 -e REDIS_PASSWORD=123456 --network mynet --name redis02 bitnami/redis
[root@VM-24-5-centos ~]# docker ps
CONTAINER ID   IMAGE           COMMAND                   CREATED          STATUS          PORTS                                       NAMES
b3e51d271341   bitnami/redis   "/opt/bitnami/script…"   27 seconds ago   Up 26 seconds   0.0.0.0:6380->6379/tcp, :::6380->6379/tcp   redis02
50cdd220d951   bitnami/redis   "/opt/bitnami/script…"   14 minutes ago   Up 11 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis01
981cb63c6752   mynginx:v1.0    "/docker-entrypoint.…"   59 minutes ago   Up 59 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp           app02

 然后使用vscode的redis插件或者redis客户端进行连接,如果使用腾讯云服务器进行连接,需要先开放对应的端口,否则链接失败。

向主机或者从机写入数据,另外一个会进行数据同步:

 四、启动MySQL容器

docker run -d -p 3306:3306 -v /app/myconf:/etc/mysql/conf.d -v /app/mydata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.37-debian

五、使用docker compose

 

下面是使用命令行的方式启动

# 创建网络
docker network create blog
# 查看网络是否创建成功
docker network ls
# 批量删除之前的容器
docker rm -f $(docker ps -aq)
# 创建MySQL容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE
=wordpress -v mysql-data:/var/lib/mysql -v /app/myconf:/etc/mysql/conf.d --restart always --name my
sql --network blog mysql:8.0
# 启动WordPress
docker run -d -p 8080:80 -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123456 -e WORDPRESS_DB_NAME=wordpress -v wordpress:/var/www/html --restart always --name wordpress-app --network blog wordpress:latest

 浏览器访问ip:8080

配置完毕之后使用配置的账号和密码进入后台:

 使用compose进行管理:

参考文档:Compose file reference | Docker Docs

使用compose的方式启动,编辑compose.yaml文件

name: myblog
services:mysql:container_name: mysqlimage: mysql:8.0ports:- "3306:3306"environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpressvolumes:- mysql-data:/var/lib/mysql- /app/myconf:/etc/mysql/conf.drestart: alwaysnetworks:- blogwordpress:image: wordpressports:- "8080:80"environment:WORDPRESS_DB_HOST: mysqlWORDPRESS_DB_USER: rootWORDPRESS_DB_PASSWORD: 123456WORDPRESS_DB_NAME: wordpressvolumes:- wordpress:/var/www/htmlrestart: alwaysnetworks:- blogdepends_on:- mysqlvolumes:mysql-data:wordpress:networks:blog:

 使用docker compose 批量启动

# 删除运行的容器
docker rm -f $(docker ps -aq)
# 删除之前的卷
docker volume rm mysql-data wordpress
# 删除之前的网络
docker network rm blog
# 使用compose启动
docker compose -f compose.yaml up -d# 输出如下
[+] Running 5/5✔ Network myblog_blog           Created                                                      0.0s✔ Volume "myblog_mysql-data"    Created                                                      0.0s✔ Volume "myblog_wordpress"     Created                                                      0.0s✔ Container mysql               Started                                                      0.3s✔ Container myblog-wordpress-1  Started                                                      0.5s

网络名和卷名都会拼接一个name作为前缀。如果没有给定容器名,则拼接后缀添加数字作为区分。另外,如果compose.yaml文件做了修改,那么再次使用上面的compose启动命令,compose会自动判断应用是否发生变化,如果发生变化才会进行更新,重新启动,如果没有变化,则保持原样。

使用compose关闭应用

docker compose -f compose.yaml down

上述命令会关闭应用,并删除网络,但是不会删除卷,也就是数据会被保存。如果要移除镜像,并且删除卷,可以使用如下命令:

docker compose -f compose.yaml down --rmi all -v

 六、制作镜像Dockerfile

常用指令:

FROM指定镜像基础环境
RUN运行自定义命令
CMD容器启动命令或参数
LABEL自定义标签
EXPOSE指定暴露端口
ENV环境变量
ADD添加文件到镜像
COPY复制文件到镜像
ENTRYPOINT容器固定启动命令
VOLUME容器数据卷
USER指定用户和用户组
WORKDIR指定默认工作目录
ARG指定构建参数

查看镜像层级:

docker image history mynginx:v1.0
IMAGE          CREATED        CREATED BY                                       SIZE      COMMENT
5227c77e8efb   36 hours ago   nginx -g daemon off;                             1.12kB    update index.html
<missing>      6 weeks ago    CMD ["nginx" "-g" "daemon off;"]                 0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    STOPSIGNAL SIGQUIT                               0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    EXPOSE map[80/tcp:{}]                            0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    ENTRYPOINT ["/docker-entrypoint.sh"]             0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    COPY 30-tune-worker-processes.sh /docker-ent…   4.62kB    buildkit.dockerfile.v0
<missing>      6 weeks ago    COPY 20-envsubst-on-templates.sh /docker-ent…   3.02kB    buildkit.dockerfile.v0
<missing>      6 weeks ago    COPY 15-local-resolvers.envsh /docker-entryp…   336B      buildkit.dockerfile.v0
<missing>      6 weeks ago    COPY 10-listen-on-ipv6-by-default.sh /docker…   2.12kB    buildkit.dockerfile.v0
<missing>      6 weeks ago    COPY docker-entrypoint.sh / # buildkit           1.62kB    buildkit.dockerfile.v0
<missing>      6 weeks ago    RUN /bin/sh -c set -x     && groupadd --syst…   113MB     buildkit.dockerfile.v0
<missing>      6 weeks ago    ENV DYNPKG_RELEASE=2~bookworm                    0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    ENV PKG_RELEASE=1~bookworm                       0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    ENV NJS_RELEASE=1~bookworm                       0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    ENV NJS_VERSION=0.8.5                            0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    ENV NGINX_VERSION=1.27.1                         0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    LABEL maintainer=NGINX Docker Maintainers <d…   0B        buildkit.dockerfile.v0
<missing>      6 weeks ago    /bin/sh -c #(nop)  CMD ["bash"]                  0B
<missing>      6 weeks ago    /bin/sh -c #(nop) ADD file:a9a95cfab16803be0…   74.8MB

参考资料:Docker - 快速通关 (3h) · 语雀

参考视频:最新版3小时速通Docker入门到项目实战【完整版】附配套资料+笔记_哔哩哔哩_bilibili


http://www.ppmy.cn/server/126415.html

相关文章

iTextPDF中,要实现表格中的内容在数据长度超过边框时自动换行

在iTextPDF中&#xff0c;要实现表格中的内容在数据长度超过边框时自动换行&#xff0c;你可以使用Phrase对象并设置其HyphenationEvent&#xff0c;或者使用Chunk对象并设置其setSplitCharacter方法。以下是一些方法来实现这一功能&#xff1a; 1. 使用Phrase对象&#xff1a…

企业数据挖掘工具选择指南:如何找到最适合的工具

一、引言 在信息爆炸的时代&#xff0c;数据已经成为企业的重要资产。 数据挖掘&#xff0c;作为一种从大量数据中提取有价值信息的技术&#xff0c;对于企业决策、市场分析、风险 管理等方面具有不可估量的作用。 1. 数据挖掘的重要性 支持决策制定&#xff1a;数据挖掘能够…

推送k8s镜像到阿里云服务器

1、服务打包 2、打包后进入Dockerfile的同级目录 运行 docker build -t 镜像名:镜像版本 . (这个点是当前目录的意思&#xff0c;不能忽略)例如 docker build -t trac:v1.0.4 .3、上传镜像到阿里云镜像服务 注意选择区域 例如&#xff1a; docker tag 70743d9bdba3 registr…

Maven常见解决方案

maven引用不到本地仓库的jar&#xff0c;jar是存在的 idea中maven本地仓库jar包打包失败和无法引用的问题解决_java_脚本之家

小徐影院:Spring Boot影院管理新体验

第三章 系统分析 整个系统的功能模块主要是对各个项目元素组合、分解和更换做出对应的单元&#xff0c;最后在根据各个系统模块来做出一个简单的原则&#xff0c;系统的整体设计是根据用户的需求来进行设计的。为了更好的服务于用户要从小徐影城管理系统的设计与实现方面上做出…

我博客网站又遭受CC攻击了,记录一下

2024.9.29凌晨4点攻击开始&#xff0c;攻击目标是我的图床tc.zeruns.tech和博客blog.zeruns.tech&#xff0c;图床用的cdn是多吉云融合CDN&#xff0c;流量被刷了20GB左右就触发峰值关闭CDN了&#xff0c;HTTPS请求次数被刷了1.1亿次&#xff0c;因为设置了QPS&#xff0c;实际…

Java网络通信—UDP

0.小记 1.udp通信不需要建立socket管道&#xff0c;一边只管发&#xff0c;一边只管收 2.客户端&#xff1a;将数据&#xff08;byte&#xff09;打包成包裹&#xff08;DatagramPacket&#xff09;&#xff0c;写上地址&#xff08;IP端口&#xff09;&#xff0c;通过快递站&…

CS-BP预测 | MATLAB实现CS-BP布谷鸟搜索算法优化BP神经网络多变量时间序列预测

CS-BP预测 | MATLAB实现CS-BP布谷鸟搜索算法优化BP神经网络多变量时间序列预测 目录 CS-BP预测 | MATLAB实现CS-BP布谷鸟搜索算法优化BP神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现CS-BP多变量时间序列预测(布谷鸟搜索算法优化B…