6.5.Docker数据管理和端口映射应用

2024-05-10 06:52

本文主要是介绍6.5.Docker数据管理和端口映射应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 实战总体步骤
  • 案例1:安装tomcat(端口映射使用)
  • 案例2:安装mysql(数据卷应用)
    • 测试版
    • 实战版
  • 案例3:安装Redis(数据卷应用)

实战总体步骤

  1. 搜索镜像

    可以在Dockerhub中查看容器如何使用,包括拉取和启动等。

  2. 拉取镜像

  3. 查看镜像

  4. 启动镜像

  5. 停止镜像

  6. 移除镜像

案例1:安装tomcat(端口映射使用)

  1. 搜索镜像

    docker hub上查找tomcat或通过命令搜索

    [root@zyn01 ~]# docker search -f is-official=true tomcat
    NAME      DESCRIPTION                                     STARS     OFFICIAL
    tomcat    Apache Tomcat is an open source implementati…   3667      [OK]
    tomee     Apache TomEE is an all-Apache Java EE certif…   115       [OK]
    
  2. 拉取镜像

    从docker hub拉取镜像到本地

    [root@zyn01 ~]# docker pull tomcat
    
  3. 查看镜像

    [root@zyn01 ~]# docker images tomcat
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    tomcat       latest    b64abfdee99c   2 years ago   668MB
    
  4. 启动镜像

    使用tomcat镜像创建容器实例

    [root@zyn01 ~]# docker run -it -d -p 8080:8080 tomcat
    7aa22c83581d11d6dc33e89511fe383b000fa4aa48309bbbc820ee9d1c1996b8
    [root@zyn01 ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND             CREATED              STATUS              PORTS                                       NAMES
    db6b2e945248   tomcat    "catalina.sh run"   About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   epic_jang
    

    -p 小写,主机端口:docker容器端口

    -P 大写,随机分配端口

    -i:交互

    -t:tty终端

    -d:后台

❓访问localhost:8080显示404。

可能是没有映射端口;可能是没有关闭防火墙;

新版tomcat需要进行如下修改:

把webapps.dist目录换成webapps,再次访问localhost:8080,访问成功。

[root@zyn01 ~]# docker exec -it db6b2e945248 /bin/bash
root@db6b2e945248:/usr/local/tomcat# ls
BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf  logs            temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   native-jni-lib  webapps  work
root@db6b2e945248:/usr/local/tomcat# rm webapps
rm: cannot remove 'webapps': Is a directory
root@db6b2e945248:/usr/local/tomcat# rm -r webapps
root@db6b2e945248:/usr/local/tomcat# mv webapps.dist/ webapps
  1. 免修改版本操作流程

    docker pull billygoo/tomcat8-jdk8
    docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
    

案例2:安装mysql(数据卷应用)

测试版

  1. 搜索镜像

    docker hub上查找mysql或通过命令搜索。

    [root@zyn01 ~]# docker search -f is-official=true mysql
    NAME         DESCRIPTION                                     STARS     OFFICIAL
    mysql        MySQL is a widely used, open-source relation…   15055     [OK]
    
  2. 拉取镜像

    从docker hub拉取镜像到本地

    [root@zyn01 ~]# docker pull mysql
    
  3. 查看镜像

    [root@zyn01 ~]# docker images
    REPOSITORY     TAG       IMAGE ID       CREATED                  SIZE
    mysql          latest    96a1b6f60db8   Less than a second ago   592MB
    
  4. 启动镜像

    如何启动?https://hub.docker.com/_/mysql

    使用mysql镜像创建并启动容器实例

    [root@zyn01 ~]# docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d --name mysql mysql
    f3da95267e1eba21959c7739bd5967fef956d5a44b37e763b80e1ce68e08d77d[root@zyn01 ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                                  
    NAMES
    f3da95267e1e   mysql     "docker-entrypoint.s…"   4 seconds ago    Up 3 seconds    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   
    mysql
  5. 进入容器测试mysql数据库,创建数据库和表

    [root@zyn01 ~]# docker exec -it f3da95267e1e /bin/bashbash-5.1# mysql -uroot -p123456
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 9
    Server version: 8.4.0 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> create database db01;
    Query OK, 1 row affected (0.00 sec)mysql> use db01;
    Database changed
    mysql> create table aa(id int,name varchar(20));
    Query OK, 0 rows affected (0.01 sec)mysql> insert into aa values(1,'zyn');
    Query OK, 1 row affected (0.01 sec)mysql> select * from aa;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | zyn  |
    +------+------+
    1 row in set (0.00 sec)
    

    ❓存在插入中文乱码的情况!

    原因:docker上默认字符集编码隐患,使用mac本地客户端工具可以正常显示和插入中文,但是docker里面的mysql容器实例查看,内容如下:

    mysql>  SHOW VARIABLES LIKE 'character%';
    +--------------------------+--------------------------------+
    | Variable_name            | Value                          |
    +--------------------------+--------------------------------+
    | character_set_client     | latin1                         |
    | character_set_connection | latin1                         |
    | character_set_database   | utf8mb4                        |
    | character_set_filesystem | binary                         |
    | character_set_results    | latin1                         |
    | character_set_server     | utf8mb4                        |
    | character_set_system     | utf8mb3                        |
    | character_sets_dir       | /usr/share/mysql-8.4/charsets/ |
    +--------------------------+--------------------------------+
    8 rows in set (0.00 sec)mysql> select * from aa;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | zyn  |
    |    2 | ??   |
    +------+------+
    2 rows in set (0.00 sec)
    

    接下来给出解决方案。容器删除后,数据将丢失。接下来通过挂在容器卷实现容器移除后再次重启容器数据维持不变。

实战版

  1. 新建mysql容器

    docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456  --name mysql mysql
    
  2. 新建my.cnf,通过容器卷同步给mysql容器实例

    [root@zyn01 ~]# cd /zzyyuse/mysql/conf/
    [root@zyn01 conf]# vim my.cn
    [client]
    default_character_set=utf8
    [mysqld]
    collation_server = utf8_general_ci
    character_set_server = utf8
    
  3. 修改字符集操作后,重启mysql容器再次查看字符集编码并测试插入中文。

    [root@zyn01 conf]# docker restart  mysql
    mysql> [root@zyn01 ~]# docker exec -it mysql /bin/bash
    bash-5.1# mysql -uroot -p123456
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 9
    Server version: 8.4.0 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> SHOW VARIABLES LIKE 'character%';
    +--------------------------+--------------------------------+
    | Variable_name            | Value                          |
    +--------------------------+--------------------------------+
    | character_set_client     | utf8mb3                        |
    | character_set_connection | utf8mb3                        |
    | character_set_database   | utf8mb3                        |
    | character_set_filesystem | binary                         |
    | character_set_results    | utf8mb3                        |
    | character_set_server     | utf8mb3                        |
    | character_set_system     | utf8mb3                        |
    | character_sets_dir       | /usr/share/mysql-8.4/charsets/ |
    +--------------------------+--------------------------------+
    8 rows in set (0.01 sec)mysql> create database dn01;
    Query OK, 1 row affected (0.01 sec)
    mysql> use dn01;
    Database changed
    mysql> create table aa(id int,name varchar(20));
    Query OK, 0 rows affected (0.01 sec)mysql> select * from aa;
    +------+--------+
    | id   | name   |
    +------+--------+
    |    1 | 张 三    |
    +------+--------+
    1 row in set (0.00 sec)
    
  4. 本次绑定了数据卷,因此移除容器后再次重启容器,数据依然存在

    [root@zyn01 conf]# docker stop mysql
    mysql
    [root@zyn01 conf]# docker rm mysql
    mysql
    [root@zyn01 conf]# docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456  --name mysql mysql
    3fdcedd80ef699764860393a377048ebb0ecc4400cd15e6e4ab4159e407ff631
    [root@zyn01 ~]# docker exec -it mysql /bin/bash
    bash-5.1# mysql -uroot -p123456
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 9
    Server version: 8.4.0 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use dn01;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -ADatabase changed
    mysql> select * from aa;
    +------+--------+
    | id   | name   |
    +------+--------+
    |    1 | 张 三    |
    +------+--------+
    1 row in set (0.00 sec)
    

案例3:安装Redis(数据卷应用)

  1. 拉取redis镜像

    docker pull redis:6.0.8
    
  2. 运行镜像

    [root@zyn01 conf]# docker run -d -p 6379:6379 redis:6.0.8
    d2cc16415883b0352c0d239692a17a0ac0ac7b7c04f16fea4060948769b64d4d
    [root@zyn01 conf]# docker ps
    CONTAINER ID   IMAGE         COMMAND                  CREATED             STATUS             PORTS                                                  NAMES
    d2cc16415883   redis:6.0.8   "docker-entrypoint.s…"   4 seconds ago       Up 3 seconds       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              magical_edison
    [root@zyn01 conf]# 
    [root@zyn01 conf]# docker exec -it d2cc16415883 /bin/bash
    root@d2cc16415883:/data# redis-cli
    127.0.0.1:6379> set k1 v1
    OK
    127.0.0.1:6379> get k1
    "v1"
    127.0.0.1:6379> ping
    PONG
    
  3. 在宿主机下新建目录/app/redis,将redis.conf文件上传至该目录并进行如下修改

    #1.开启redis验证 可选
    requirepass 123
    #2.允许redis外地连接 必须注释掉
    # bind 127.0.0.1
    #3.将daemonize yes注释起来或者daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
    daemonize no
    #4.开启redis数据持久化  可选
    appendonly yes
    
  4. 停止和删除redis容器,重新创建进行测试

    [root@zyn01 redis]# docker ps
    CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
    d2cc16415883   redis:6.0.8   "docker-entrypoint.s…"   25 minutes ago   Up 25 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              magical_edison[root@zyn01 redis]# docker stop d2cc16415883
    d2cc16415883
    [root@zyn01 redis]# docker rm d2cc16415883
    d2cc16415883
    [root@zyn01 redis]# docker run  -p 6379:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
    25d1f9ae4ddacea525fc00e4e8abba1e59c99557c9389b9f2b8780a51b4b1328[root@zyn01 redis]# docker exec -it myr3 /bin/bash
    root@25d1f9ae4dda:/data# redis-cli
    127.0.0.1:6379> set k1 v1
    (error) NOAUTH Authentication required.
    127.0.0.1:6379> auth 123
    OK
    127.0.0.1:6379> set k1 v1
    OK
    127.0.0.1:6379> get k1
    "v1"
    

    需要认证说明配置生效,测试成功。

这篇关于6.5.Docker数据管理和端口映射应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975746

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝