• Docker系列-第八篇Docker常用安装


    一、总体步骤

    1.搜索镜像

    2.拉取镜像

    3.查看镜像

    4.启动镜像

    5.停止容器

    6.移除容器

    二、安装Tomcat

    2.1 docker push方式安装tomcat

    https://hub.docker.com/_/tomcat docker hub上每个镜像怎么使用,都有对应的说明,这个说明对于每个镜像的安装和使用都很有帮助

    在这里插入图片描述

    2.1.1.docker hub上面查找tomcat镜像

    在这里插入图片描述

    2.1.2.从docker hub上拉取tomcat镜像到本地
    2.1.3.docker images查看是否有拉取到的tomcat
    2.1.4.使用tomcat镜像创建容器(也叫运行镜像)
    • docker run -it -p 8080:8080 tomcat

    -p 主机端口:docker容器端口

    • -P 随机分配端口

    在这里插入图片描述

    [root@localhost ~]# docker run -P  -d --name tomcat7 tomcat:7.0.96 
    6e33b8cadd102f890a6ade67ee70165a637b338d7684daa948d4f0c4eb6b753e
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    6e33b8cadd10        tomcat:7.0.96       "catalina.sh run"   10 seconds ago      Up 7 seconds        0.0.0.0:32768->8080/tcp   tomcat7
    

    映射到宿主机上的端口是32768

    在这里插入图片描述

    • i:交互

    • t:终端

    2.2通过Dockerfile方式安装

    《Docker系列-第六篇DockerFile解析》已经写了自定义tomcat镜像

    三、安装MySQL

    3.1docker pull 方式安装MySQL

    1.docker hub上面查找MySQL镜像
    [root@localhost ~]# docker search mysql
    NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   8723                [OK]                
    mariadb                           MariaDB is a community-developed fork of MyS…   3053                [OK]                
    mysql/mysql-server                Optimized MySQL Server Docker images. Create…   645                                     [OK]
    centos/mysql-57-centos7           MySQL 5.7 SQL database server                   63                                      
    centurylink/mysql                 Image containing mysql. Optimized to be link…   61                                      [OK]
    mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   54                                      
    deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   41                                      [OK]
    bitnami/mysql                     Bitnami MySQL Docker Image                      36                                      [OK]
    tutum/mysql                       Base docker image to run a MySQL database se…   34                                      
    schickling/mysql-backup-s3        Backup MySQL to S3 (supports periodic backup…   28                                      [OK]
    prom/mysqld-exporter                                                              23                                      [OK]
    linuxserver/mysql                 A Mysql container, brought to you by LinuxSe…   22                                      
    centos/mysql-56-centos7           MySQL 5.6 SQL database server                   16                                      
    circleci/mysql                    MySQL is a widely used, open-source relation…   15                                      
    mysql/mysql-router                MySQL Router provides transparent routing be…   13                                      
    arey/mysql-client                 Run a MySQL client from a docker container      11                                      [OK]
    imega/mysql-client                Size: 36 MB, alpine:3.5, Mysql client: 10.1.…   8                                       [OK]
    openshift/mysql-55-centos7        DEPRECATED: A Centos7 based MySQL v5.5 image…   6                                       
    yloeffler/mysql-backup            This image runs mysqldump to backup data usi…   6                                       [OK]
    fradelg/mysql-cron-backup         MySQL/MariaDB database backup using cron tas…   4                                       [OK]
    ansibleplaybookbundle/mysql-apb   An APB which deploys RHSCL MySQL                2                                       [OK]
    genschsa/mysql-employees          MySQL Employee Sample Database                  2                                       [OK]
    jelastic/mysql                    An image of the MySQL database server mainta…   1                                       
    monasca/mysql-init                A minimal decoupled init container for mysql    0                                       
    widdpim/mysql-client              Dockerized MySQL Client (5.7) including Curl…   0                                       [OK]
    
    2.从docker hub上(阿里云加速器)拉取MySQL镜像到本地标签为5.6
     docker pull mysql:5.6
    
    3.使用MySQL5.6镜像创建容器(也叫运行镜像)===开启MySQL服务实例
    docker run -p 3306:3306 --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
    
    • --name 容器名

    • -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码

    • -d 后台运行容器,并返回容器ID

    • -p 设置对外映射对端.如果不设置,客户端工具可能无法连接,因为没有映射端口

      赋予远程连接权限

      GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
      flush privileges;

    4.进入容器进行操作
    #进入容器
    docker exec -it some-mysql /bin/bash
    
    #登录mysql
    mysql -u root -p
    ###然后可以进行自己想要的mysql操作了
    

    mysql 配置是存放在 /etc/mysql目录下的

    5.用自定义的MySQL配置文件

    MySQL的默认配置可以在/etc/mysql/my.cnf中找到,该目录中还包含其他文件,例如/etc/mysql/conf.d或/etc/mysql/mysql.conf.d。 请检查mysql映像本身中的相关文件和目录,以获取更多详细信息。

    如果/my/custom/config-file.cnf是自定义配置文件的路径和名称,则可以像如下方式启动mysql容器(请注意,此命令仅使用自定义配置文件的目录路径):

    docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=1234656 -d mysql:5.6
    

    这将启动一个新的容器some-mysql,其中MySQL实例使用/etc/mysql/my.cnf和/etc/mysql/conf.d/config-file.cnf中的组合启动设置,其中后者的设置优先 。

    6.增加配置不通过cnf文件增加方式

    可以将许多配置选项作为标志传递给mysqld。 可以灵活地自定义容器,而无需cnf文件。 例如,如果要更改所有表的默认编码和排序规则以使用UTF-8(utf8mb4),则运行以下命令:

    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    

    如果想查看可用选项的完整列表,可运行如下:

    docker run -it --rm mysql:5.6 --verbose --help
    
    7.环境变量

    启动mysql映像时,可以通过在docker run命令行上传递一个或多个环境变量来调整MySQL实例的配置。 请注意,如果您使用已经包含数据库的数据目录启动容器,则以下任何变量都将无效:容器启动时,任何现有数据库都将保持不变。

    MYSQL_ROOT_PASSWORD

    该变量是必需变量,它指定将为MySQL根超级用户帐户设置的密码

    MYSQL_DATABASE

    此变量是可选的,允许您指定在映像启动时要创建的数据库的名称。 如果提供了用户/密码,则将授予该用户对该数据库的超级用户访问权限(对应于GRANT ALL)。

    MYSQL_USER, MYSQL_PASSWORD

    这些变量是可选的,与创建新用户和设置该用户的密码一起使用。 将为该用户授予MYSQL_DATABASE变量指定的数据库的超级用户权限。 这两个变量都是创建用户所必需的。

    请注意,无需使用此机制来创建根超级用户,该用户默认情况下是使用MYSQL_ROOT_PASSWORD变量指定的密码创建的。

    MYSQL_ALLOW_EMPTY_PASSWORD

    这是一个可选变量。 设置为yes允许容器以root用户的空白密码启动。 注意:除非您真的知道自己在做什么,否则不建议将此变量设置为yes,因为这将使您的MySQL实例完全不受保护,从而使任何人都可以获得完全的超级用户访问权限。

    MYSQL_RANDOM_ROOT_PASSWORD

    这是一个可选变量。 设置为yes可以为root用户生成一个随机的初始密码(使用pwgen)。 生成的root密码将被打印到stdout(GENROTED ROOT PASSWORD:.....)。

    MYSQL_ONETIME_PASSWORD

    初始化完成后,将root用户(不是MYSQL_USER中指定的用户!)设置为过期用户,从而在首次登录时强制更改密码。 注意:仅MySQL 5.6+支持此功能。 在MySQL 5.5上使用此选项将在初始化期间引发适当的错误。

    8.Docker秘密

    作为通过环境变量传递敏感信息的替代方法,可以将_FILE附加到先前列出的环境变量中,从而使初始化脚本从容器中存在的文件中加载那些变量的值。 特别是,它可以用来从存储在/ run / secrets / <secret_name>中的Docker机密加载密码。

    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:5.6
    

    当前仅支持如下变量:

    MYSQL_ROOT_PASSWORD, MYSQL_ROOT_HOST, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD.

    9.数据存储位置

    重要说明:有几种方法可以存储在Docker容器中运行的应用程序使用的数据。鼓励对mysql熟悉的用户使用。

    让Docker通过使用自己的内部卷管理将数据库文件写入主机系统上的磁盘,从而管理数据库数据的存储。这是默认设置,对用户来说是简单且相当透明的。不利之处在于,对于直接在主机系统(即外部容器)上运行的工具和应用程序而言,文件可能难以定位。

    在主机系统上(容器外部)创建一个数据目录,并将其安装到从容器内部可见的目录中。这会将数据库文件放置在主机系统上的已知位置,并使主机系统上的工具和应用程序易于访问文件。缺点是用户需要确保目录存在,例如主机系统上的目录权限和其他安全机制已正确设置。

    ​ 第二种方式:

    • step1 在宿主机上创建合适的目录 如 /my/own/datadir
    • step2 启动mysql容器
    docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.6
    

    /var/lib/mysql 这是msyql容器默认的存储数据的文件目录

    在这里插入图片描述

    10.数据库数据备份

    大多数普通工具都可以使用,尽管在某些情况下它们的使用可能会有些麻烦,以确保它们可以访问mysqld服务器。 确保这一点的一种简单方法是使用docker exec并从同一容器运行该工具,类似于以下内容:

    备份所有数据库:

    docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /tmp/all-databases.sql
    

    备份指定的数据库:

    docker exec some-mysql sh -c 'exec mysqldump  -uroot -p"$MYSQL_ROOT_PASSWORD" meeting' > /tmp/all-databases1.sql
    

    meeting 为指定的数据库

    11.数据库数据恢复

    用于还原数据。 您可以将docker exec命令与-i标志一起使用,类似于以下内容:

    docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /tmp/all-databases1.sql
    

    三、安装Redis

    3.1docker pull 方式安装Redis

    3..1.1docker hub上查找redis镜像
    3.1.2拉取指定标签镜像
    docker pull redis:4.0
    

    等待下载完成后,在本地查找标签为4.0的redis镜像

    [root@localhost data]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    redis               4.0                 e187e861db44        2 weeks ago         89.2MB
    
    3.1.3启动Redis实例
     docker run -p 6379:6379  --name meeting-redis -d redis:4.0
    
    3.1.4启动并开启持久化
     docker run -p 6379:6379  --name meeting-redis -d redis:4.0 redis-server --appendonly yes
    

    如果启用了持久性,则数据存储在容器中的/data目录下,可以设置数据卷将文件夹映射到宿主机上

    -v $PWD:/data

    3.1.5通过redis-cli连接
    docker exec -it 容器名/容器ID redis-cli
    
    3.1.6用自定义的MySQL配置文件

    MySQL的默认配置可以在/etc/mysql/my.cnf中找到,该文件可能包含附加目录,例如/etc/mysql/conf.d或/etc/mysql/mysql.conf.d。 请检查mysql映像本身中的相关文件和目录,以获取更多详细信息。

    如果/my/custom/config-file.cnf是自定义配置文件的路径和名称,则可以像这样启动mysql容器(请注意,此命令仅使用自定义配置文件的目录路径):

     docker run -p 3306:3306 --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
    

    这将启动一个新的容器some-mysql,其中MySQL实例使用/etc/mysql/my.cnf和/etc/mysql/conf.d/config-file.cnf中的组合启动设置,其中后者的设置优先 。

    3.2如果想使用自己的redis.conf

    可以创建自己的Dockerfile,将redis.conf从上下文添加到/data/中,具体Dockerfile内容

    FROM redis:4.0
    COPY redis.conf /usr/local/etc/redis/redis.conf
    CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
    

    另外,可以使用docker run选项沿着相同的行指定一些内容。

    docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis:4.0 redis-server /usr/local/etc/redis/redis.conf
    

    其中/myredis/conf/是包含redis.conf文件的本地目录。使用此方法意味着不需要创建Dockerfil生成镜像

    微信公众号
    JAVA程序猿成长之路

  • 相关阅读:
    关于多态
    关于lock锁
    wait()和notify()
    多线程之间的通讯
    多线程的异步请求模式
    合理配置线程池
    自定义线程池
    Curl的毫秒超时的一个”Bug”
    Nginx正确记录post日志的方法
    NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC)
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12187051.html
Copyright © 2020-2023  润新知