码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 十四、Docker的基本操作


    目录

    (一)镜像命令

    一、拉取Nginx

    二、查看镜像

    三、导出文件

    四、删除镜像

    五、加载镜像

    (二)容器命令

    一、例子:运行一个nginx容器

    1、输入运行命令

    2、使用命令查看宿主机ip

    3、在外部浏览器访问

    4、查看日志

    二、例子:修改nginx的index.html文件

    1、进入容器

    2、进入HTML所在目录

    3、修改内容

    4、在网页查看

    5、停止容器

    6、重启容器

    7、删除容器

    8、展示容器

    三、例子:创建并运行一个redis容器,并实现数据持久化

    1、使用命令运行redis容器

    2、进入容器,并执行redis-cli客户端命令,存入num=666

    3、查看是否成功

    注:也可以直接进入redis

    四、数据卷

    1、传统数据和容器耦合

    2、使用数据卷解决问题

    3、基本操作

    4、数据卷的作用

    五、例子:创建一个数据卷,并查看数据卷在宿主机的目录位置

    1、使用命令创建数据卷

    2、查看是否创建成功

    3、查看详细信息

    4、删除未使用的卷

    六、例子:挂载数据卷

    1、创建nginx容器并挂载

    2、查看数据卷详细信息

    3、复制文件位置,在Moba中找到文件

    4、右键选择使用VSCode打开,并修改

    5、在网页中查看

    七、例子:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

    1、下载或导入mysql镜像

    2、创建目录

    3、在conf中创建配置文件并编写

    4、创建容器并挂载

    5、在navicat创建连接

    6、总结

    八、自定义镜像

    九、例子:基于Ubuntu镜像构建一个新的镜像,运行一个java项目

    1、创建docker-demo目录和Dockerfile文件,并在其中编写如下

    2、向docker-demo中导入文件

    3、输入命令,创建镜像

    4、创建容器

    5、在页面访问

    十、例子:使用alpine创建镜像

    1、修改dockerfile

    2、构建镜像

    十一、DockerCompose

    1、作用:

    十二、部署微服务集群

    1、编写docker-compose.yml文件

    2、将java代码中的数据库和nacos地址都改为yml文件中的服务地址

    3、在每个微服务的pom文件中都加上打包依赖

    4、清理缓存

    5、打包

    6、在target目录中找到jar包,并拷贝到对应目录

    7、进入虚拟机,将cloud-demo文件夹导入tmp

    8、进入cloud-demo文件并运行


    (一)镜像命令

    一、拉取Nginx

    docker pull nginx

    二、查看镜像

    docker images

    三、导出文件

    docker save -o nginx.tar nginx:latest

    四、删除镜像

    docker rmi 名字:版本 或 ID

    五、加载镜像

    docker load -i nginx.tar

    (二)容器命令

    注:

    暂停时,操作系统会将容器挂起;(可以恢复)

    停止时,操作系统会将容器删除;(无法恢复)

    所以不使用unstop;

    一、例子:运行一个nginx容器

    1、输入运行命令

    docker run --name containerName -p 80:80 -d nginx
    
    • docker run :创建并运行一个容器
    • --name:给容器起一个名字,比如叫做mn
    • -p︰将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
    • -d:后台运行容器
    • nginx:镜像名称,例如nginx

    注意:

    此命令会创建一个宿主机80端口和容器80端口的映射,当访问宿主机80端口时,请求会映射到容器的80端口,从而实现容器的访问。

    2、使用命令查看宿主机ip

    ifconfig

    3、在外部浏览器访问

    4、查看日志

    1. docker logs -f 容器名 //跟踪日志输出
    2. docker logs 容器名 //日志

    二、例子:修改nginx的index.html文件

    1、进入容器

    docker exec -it mn bash 
    
    • docker exec :进入容器内部,执行一个命令
    • -it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
    • mn :要进入的容器的名称
    • bash:进入容器后执行的命令,bash是一个linux终端交互命令

    2、进入HTML所在目录

    cd /usr/share/nginx/html
    

    3、修改内容

    1. sed -i 's#Welcome to nginx#修改了这里#g' index.html
    2. sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html

    4、在网页查看

    5、停止容器

    docker stop mynginx

    6、重启容器

    1. docker restart mynginx
    2. docker start mynginx

    7、删除容器

    1. docker rm mynginx //删除
    2. docker rm -f mynginx //强制删除

    8、展示容器

    1. docker ps //展示运行中容器
    2. docker ps -a //展示所有容器

    三、例子:创建并运行一个redis容器,并实现数据持久化

    1、使用命令运行redis容器

    docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes
    

    2、进入容器,并执行redis-cli客户端命令,存入num=666

    docker exec -it redis bash
    redis-cli
    set num 666

    3、查看是否成功

    get num

    注:也可以直接进入redis

    docker exec -it redis redis-cli
    

    四、数据卷

    1、传统数据和容器耦合

    2、使用数据卷解决问题

    1. 在上图中,数据存储在宿主机的文件系统中,不会因为容器的删除而删除;
    2. 而且同一份数据可以被多个容器所使用,实现数据共享;
    3. 在宿主机中更容易修改配置,且容易升级和维护;

    3、基本操作

    4、数据卷的作用

    将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

    五、例子:创建一个数据卷,并查看数据卷在宿主机的目录位置

    1、使用命令创建数据卷

    docker volume create html

    2、查看是否创建成功

    docker volume ls

    3、查看详细信息

    docker inspect html

    4、删除未使用的卷

    docker volume prune

    六、例子:挂载数据卷

    1、创建nginx容器并挂载

    docker run --name mynginx -p 80:80 -v html:/usr/share/nginx/html -d nginx
    

    2、查看数据卷详细信息

    docker inspect html

    3、复制文件位置,在Moba中找到文件

    4、右键选择使用VSCode打开,并修改

    5、在网页中查看

    注意:

    若挂载时,数据卷不存在,docker会自动帮你生成;

    七、例子:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

    1、下载或导入mysql镜像

    1. docker pull mysql //下载
    2. docker load -i mysql.tar //导入

    2、创建目录

    1. mkdir -p mysql/data
    2. mkdir -p mysql/conf

    3、在conf中创建配置文件并编写

    vi ms.cnf
    1. [mysqld]
    2. skip-name-resolve
    3. character_set_server=utf8
    4. datadir=/var/lib/mysql
    5. server-id=1000

    4、创建容器并挂载

    1. docker run \
    2. --name mysql \
    3. -e MYSQL_ROOT_PASSWORD=123 \
    4. -p 3306:3306 \
    5. -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
    6. -v /tmp/mysql/data:/var/lib/mysql \
    7. -d \
    8. mysql:5.7.25

    第一个-v,前面是宿主机配置文件位置,后面是容器配置文件位置;

    第二个-v,前面是宿主机数据文件位置,后面是容器数据文件位置;

    5、在navicat创建连接

    6、总结

    八、自定义镜像

    镜像是分层结构,每一层称为一个Layer:

    1. Baselmage层:包含基本的系统函数库、环境变量、文件系统
    2. Entrypoint: 入口,是镜像中应用启动的命令
    3. 其它:在Baselmage基础上添加依赖、安装程序、完成整个应用的安装和配置
       

    详情查看官网

    九、例子:基于Ubuntu镜像构建一个新的镜像,运行一个java项目

    1、创建docker-demo目录和Dockerfile文件,并在其中编写如下

    1. # 指定基础镜像
    2. FROM ubuntu:16.04
    3. # 配置环境变量,JDK的安装目录
    4. ENV JAVA_DIR=/usr/local
    5. # 拷贝jdk和java项目的包
    6. COPY ./jdk8.tar.gz $JAVA_DIR/
    7. COPY ./docker-demo.jar /tmp/app.jar
    8. # 安装JDK
    9. RUN cd $JAVA_DIR \
    10. && tar -xf ./jdk8.tar.gz \
    11. && mv ./jdk1.8.0_144 ./java8
    12. # 配置环境变量
    13. ENV JAVA_HOME=$JAVA_DIR/java8
    14. ENV PATH=$PATH:$JAVA_HOME/bin
    15. # 暴露端口
    16. EXPOSE 8090
    17. # 入口,java项目的启动命令
    18. ENTRYPOINT java -jar /tmp/app.jar

    2、向docker-demo中导入文件

    3、输入命令,创建镜像

    1. docker build -t javaweb:1.0 .
    2. // 镜像名 版本 所在目录

    4、创建容器

    docker run --name web -p 8090:8090 -d javaweb:1.0
    

    5、在页面访问

    十、例子:使用alpine创建镜像

    1、修改dockerfile

    1. # 指定基础镜像
    2. FROM openjdk:8-alpine
    3. # 配置环境变量,JDK的安装目录
    4. COPY ./docker-demo.jar /tmp/app.jar
    5. # 暴露端口
    6. EXPOSE 8090
    7. # 入口,java项目的启动命令
    8. ENTRYPOINT java -jar /tmp/app.jar

    2、构建镜像

    docker build -t javaweb:2.0 .
    

    这个可以少几个步骤

    十一、DockerCompose

    1、作用:

    1. Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
    2. Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
       

    十二、部署微服务集群

    1、编写docker-compose.yml文件

    1. version: "3.2"
    2. services:
    3. nacos:
    4. image: nacos/nacos-server
    5. environment:
    6. MODE: standalone
    7. ports:
    8. - "8848:8848"
    9. mysql:
    10. image: mysql:5.7.25
    11. environment:
    12. MYSQL_ROOT_PASSWORD: 123
    13. volumes:
    14. - "$PWD/mysql/data:/var/lib/mysql"
    15. - "$PWD/mysql/conf:/etc/mysql/conf.d/"
    16. userservice:
    17. build: ./user-service
    18. orderservice:
    19. build: ./order-service
    20. gateway:
    21. build: ./gateway
    22. ports:
    23. - "10010:10010"

    2、将java代码中的数据库和nacos地址都改为yml文件中的服务地址

    3、在每个微服务的pom文件中都加上打包依赖

    1. <build>
    2. <finalName>app</finalName>
    3. <plugins>
    4. <plugin>
    5. <groupId>org.springframework.boot</groupId>
    6. <artifactId>spring-boot-maven-plugin</artifactId>
    7. </plugin>
    8. </plugins>
    9. </build>

    4、清理缓存

    5、打包

    6、在target目录中找到jar包,并拷贝到对应目录

    7、进入虚拟机,将cloud-demo文件夹导入tmp

    8、进入cloud-demo文件并运行

    docker-compose up -d

  • 相关阅读:
    Dash 2.14版本开始支持动态回调注册!
    售后处置跟踪系统设想
    企业电子招投标采购系统源码之电子招投标的组成
    Linux IO多路复用模型
    数据结构与算法之美08(递归)
    代码随想录算法训练营第23期day22|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
    The Kalman Filter
    测试4G网络是否正常的几种方法
    Linux结构目录说明以及相关作用【重点】
    【Django学习笔记 - 13】:关联查询(日期查询、一对一查询、一对多查询、多对多查询)
  • 原文地址:https://blog.csdn.net/icbbm/article/details/134496471
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号