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程序猿成长之路

posted @ 2020-01-13 14:17  盲目的拾荒者  阅读(658)  评论(0编辑  收藏  举报