Docker
1 安装
卸载原有的docker
| sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine |

设置仓库链接
| sudo yum install -y yum-utils |
| sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |

安装Docker
| sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |

启动Dcoker
| sudo systemctl enable docker |
| sudo systemctl start docker |

测试
| sudo docker run hello-world |

2 镜像加速



| # 1 |
| sudo mkdir -p /etc/docker |
| # 2 |
| sudo tee /etc/docker/daemon.json <<-'EOF' |
| { |
| "registry-mirrors": ["https://ballbe5k.mirror.aliyuncs.com"] |
| } |
| EOF |
| # 3 |
| sudo systemctl daemon-reload |
| # 4 |
| sudo systemctl restart docker |
3 Docker命令
3.1 帮助文档
| # 查看所有指令 |
| docker --help |
| |
| # 查看具体某个指令,例如ps |
| docker ps --help |


3.2 镜像和容器
3.2.1 搜索镜像
Docker-Hub搜索镜像
镜像地址:https://hub.docker.com/


3.2.2 下载镜像
[ ] :代表可写可不写,如果不写,默认是从docker-hub上拉取



3.2.3 列出镜像信息


| # 列出所有镜像的的镜像id |
| docker images -a -q 或者 docker images -aq |
| # 列出所有镜像名为mysql的镜像id |
| docker images -aq --filter=reference=mysql |

3.2.4 列出容器信息



3.2.5 创建并运行容器


如果没有输入COMMAND则会默认运行的命令


默认运行方式


后台运行


3.2.6 删除容器




3.2.7 进入容器执行命令

| docker exec -it a0937 bash |
| curl http://127.0.0.1 |



3.2.8 查看容器日志


持续显示新的日志



3.2.9 容器文件拷贝

宿主机拷贝到容器中
| docker cp /home/cp_test a093:/home/cp_test |

容器拷贝到宿主机中
| docker cp a093:/usr/share/nginx/html/index.html /home/index.html |


3.2.10 停止/运行容器

| docker stop xxx |
| docker start xxx |

3.3 run命令
3.3.1 重点学习
run命令是最重要的命令,我们要学会其常用选项才能看懂真正生产中有的命令。
3.3.2 常用选项
-p 端口映射
-p 端口对外发布(端口映射)


我们如何知道需要发布容器的哪些端口
方式一

方式二




-v 数据卷

容器中哪些位置需要挂载数据卷
方式一

方式二
nginx的dockerfile中不知道为什么没有volume


结构图



| docker run -d -p 81:80 -v /home/index.html:/usr/share/nginx/html/index.html nginx |


-e 设置环境变量

如何知道需要设置什么环境变量

| docker run -d -p 3307:3306 -v /home/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=fp mysql:5.7 |


如果在mysql中,新建一个test数据库,然后删除mysql 容器。重新再次运行刚才命令,重新连接mysql,发现test数据库依然存在,因为-v数据卷进行了持久化操作
--name 容器命名

| docker run -d --name nginx-test -p 82:80 -v /home/index.html:/usr/share/nginx/html/index.html nginx |


--restart 重启策略

| docker update --restart=always nginx-test |


| docker run --restart always -d --name nginx-test -p 82:80 -v /home/index.html:/usr/share/nginx/html/index.html nginx |
3.4 其他镜像和容器命令
3.4.1 镜像详细信息

| docker images |
| docker image inspect 605c |

| docker top 40ba |
| docker inspect 40ba |

3.5 数据卷
3.5.1 作用

3.5.2 相关操作
设置数据卷

| docker run -d -p 80:80 -v nginx_html:/usr/share/nginx/html nginx |




列出、查看、创建、删除




4 项目部署案例
4.1 项目介绍

4.2 部署
4.2.1 mysql

| docker run -d -v mysql_data:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=fp --restart always --name blog_mysql mysql:5.7 |

连接成功

4.2.2 redis


| docker run -d -v redis_data:/data -p 6379:6379 --restart always --name blog_redis redis:7.0 redis-server --appendonly yes |


4.2.3 后端应用


这个地方有些问题,需要学习网络后,在解决
学习网络后



4.2.4 前端应用

5 网络(网桥)
5.1 使用原因



| apt-get update |
| apt install iputils-ping |



5.2 相关操作

| docker network create blog_net |
| docker network ls |
| docker network connect blog_net blog_mysql |
| docker network inspect blog_net |
| docker network rm nettest |





6 DockerFile
6.1 概述
为什么要学习

镜像分层


6.2 基本语法

6.3 快速入门


| FROM centos:7 |
| CMD ["echo","helloworld"] |

| docker build -t hello:1.0 -f HelloWorld . |

6.4 指令学习
6.4.1 常用指令
FROM

CMD




ENV


| FROM centos:7 |
| ENV CONTENT="helloworld" |
| CMD echo $CONTENT |


| docker run -e CONTENT="JAVA" test01:2 |

WORKDIR


测试

RUN



| FROM centos:7 |
| ENV CONTENT="hellodcoker" |
| WORKDIR /app/fp |
| RUN echo $CONTENT > content.txt |
| CMD ["cat","content.txt"] |


ADD



Test03
| FROM nginx:1.21.5 |
| WORKDIR /app |
| ADD sg-blog-vue.tar.gz . |
| |
| RUN cp -r sg-blog-vue/dist/* /usr/share/nginx/html |
| CMD ["nginx","-g","daemon off;"] |



| FROM nginx:1.21.5 |
| WORKDIR /app |
| ADD https://sg-blog-oss.oss-cn-beijing.aliyuncs.com/exampledir/sg-blog-vue.tar.gz . |
| RUN tar -zxvf sg-blog-vue.tar.gz |
| RUN cp -r sg-blog-vue/dist/* /usr/share/nginx/html |
| CMD ["nginx","-g","daemon off;"] |

EXPOSE

| FROM nginx:1.21.5 |
| WORKDIR /app |
| ADD https://sg-blog-oss.oss-cn-beijing.aliyuncs.com/exampledir/sg-blog-vue.tar.gz . |
| RUN tar -zxvf sg-blog-vue.tar.gz |
| RUN cp -r sg-blog-vue/dist/* /usr/share/nginx/html |
| EXPOSE 80 |
| CMD ["nginx","-g","daemon off;"] |


COPY





ENTRYPOINT




7 项目部署
7.1 后端部署


fp_blog_dockerfile
| FROM java:openjdk-8u111 |
| |
| WORKDIR /app |
| |
| ADD sangeng-blog-1.0-SNAPSHOT.jar . |
| |
| EXPOSE 7777 |
| |
| CMD ["java","-jar","sangeng-blog-1.0-SNAPSHOT.jar","--spring.datasource.url=jdbc:mysql://blog_mysql:3306/sg_blog? |
| useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai","--spring.datasource.username=root","--spring.datasource.password=fp","--spring.redis.host=blog_redis"] |

构建容器
| docker build -t fp_blog:01 -f fp_blog_dockerfile . |

| docker run -d -p 7777:7777 --network blog_net --restart always --name fp_blog fp_blog:01 |
| curl --location --request POST 'http://localhost:7777/login' --header 'Content-Type:application/json' --data '{"userName":"sg","password":"1234"}' |

7.2 前端部署

| FROM nginx:1.21.5 |
| WORKDIR /app |
| COPY sg-blog-vue . |
| RUN cp -r dist/* /usr/share/nginx/html |
| EXPOSE 80 |
| CMD ["nginx","-g","daemon off;"] |

| docker build -t fp_blog_vue:01 -f fp_blog_vue_dockerfile . |

| docker run -d -p 80:80 --restart always --name fp_blog_vue fp_blog_vue:01 |


重新构建容器运行
访问

8 推送镜像到镜像仓库



| docker build -t fengpengfpfp/fp_blog:01 -f fp_blog_dockerfile . |
| docker tag fengpengfpfp/fp_blog:01 fengpengfpfp/fp_blog:01 |
| docker push fengpengfpfp/fp_blog:01 |


9 DockerCompose
9.1 概述


9.2 快速入门




| services: |
| test: |
| image: nginx |



9.3 元素

9.4 案例

docker-compose.yaml
| services: |
| |
| blog_mysql: |
| image: mysql:5.7 |
| |
| volumes: |
| - mysql_data:/var/lib/mysql |
| ports: |
| - 3307:3306 |
| environment: |
| MYSQL_ROOT_PASSWORD: root |
| restart: always |
| networks: |
| - blog_net |
| |
| blog_redis: |
| image: redis:7.0 |
| volumes: |
| - redis_data:/data |
| ports: |
| - 6379:6379 |
| restart: always |
| command: ['redis-server','--appendonly','yes'] |
| networks: |
| - blog_net |
| |
| fp_blog: |
| image: fp_blog:01 |
| ports: |
| - 7777:7777 |
| networks: |
| - blog_net |
| restart: always |
| |
| fp_blog_vue: |
| image: fp_blog_vue:01 |
| ports: |
| - 80:80 |
| restart: always |
| |
| |
| networks: |
| blog_net: |
| |
| volumes: |
| mysql_data: |
| redis_data: |




因为数据卷不是我们之前定义的数据卷,所以数据卷对应的数据库中就没有之前的数据,因此查询失败

| services: |
| |
| blog_mysql: |
| image: mysql:5.7 |
| volumes: |
| - mysql_data:/var/lib/mysql |
| ports: |
| - 3307:3306 |
| environment: |
| MYSQL_ROOT_PASSWORD: root |
| restart: always |
| networks: |
| - blog_net |
| |
| blog_redis: |
| image: redis:7.0 |
| volumes: |
| - redis_data:/data |
| ports: |
| - 6379:6379 |
| restart: always |
| command: ['redis-server','--appendonly','yes'] |
| networks: |
| - blog_net |
| |
| fp_blog: |
| image: fp_blog:01 |
| ports: |
| - 7777:7777 |
| networks: |
| - blog_net |
| restart: always |
| |
| fp_blog_vue: |
| image: fp_blog_vue:01 |
| ports: |
| - 80:80 |
| restart: always |
| |
| networks: |
| blog_net: |
| |
| volumes: |
| mysql_data: |
| external: true |
| redis_data: |
| external: true |




【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步