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生成镜像
微信公众号