基础 7 —— Docker 中常见软件的简单安装

📅 发布时间:2026/8/24 5:41:41
基础 7 —— Docker 中常见软件的简单安装
7.1 安装 tomcat第一步搜索镜像[rootshjava101 ~]# docker search tomcat第二步拉取镜像[rootshjava101 ~]# docker pull tomcat第三步docker images 查看是否有拉取到的 tomcat[rootshjava101 ~]# docker images tomcatREPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest fb5657adc89212months ago 680MB第四步使用 tomcat 镜像创建容器实例也叫运行镜像[rootshjava101 ~]# docker run -d -p 8080:8080 --name t1 tomcat[rootshjava101 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7dd763fc2bcd tomcatcatalina.sh run4seconds ago Up3seconds0.0.0.0:8080-8080/tcp, :::8080-8080/tcp t1-p 8080:8080是端口映射意思是将宿主机的 8080 端口映射到容器的 8080 端口。此时我们访问8080为什么会出现 404我们的 tomcat 不是已经成功启动了吗这是因为我们拉取的是最新的 tomcat 镜像最新的 tomcat 对首页访问的规则做了修改。所以我们先进入 tomcat 容器的内部[rootshjava101 ~]# docker exec -it 7dd763fc2bcd /bin/bash # 进入容器的内部root7dd763fc2bcd:/usr/local/tomcat# ls -l # 查看容器内部的文件我们进入 webapps 目录root7dd763fc2bcd:/usr/local/tomcat# cd webappsroot7dd763fc2bcd:/usr/local/tomcat/webapps# ls -ltotal0我们发现这里面是空的这也是我们为什么不能访问 tomcat 首页的原因。真正有货的是webapps.dist/目录root7dd763fc2bcd:/usr/local/tomcat# cd webapps.dist/root7dd763fc2bcd:/usr/local/tomcat/webapps.dist# ls -ltotal4drwxr-xr-x.3root root223Dec222021ROOT drwxr-xr-x.15root root4096Dec222021docs drwxr-xr-x.7root root99Dec222021examples drwxr-xr-x.6root root79Dec222021host-manager drwxr-xr-x.6root root114Dec222021manager所以我们现在把已经存在的 webapps 目录删除然后将 webapps.dist 目录重命名为 webapps 目录。root7dd763fc2bcd:/usr/local/tomcat# rm -rf webappsroot7dd763fc2bcd:/usr/local/tomcat# mv webapps.dist/ webapps接下来我们再访问 tomcat 首页我们发现访问成功。但是这样进入容器修改容器的规则很麻烦我们可不可以安装一个免修改的 tomcat 镜像呢是可以的。[rootshjava101 ~]# docker pull billygoo/tomcat8-jdk8 # 下载一个tomcat8镜像[rootshjava101 ~]# docker run -d -p 8081:8080 --name mytomcat8billygoo/tomcat8-jdk8我们访问 tomcat 的首页7.2 安装 MySQL我们以安装 mysql5.7 为例7.2.1 简单版本安装第一步拉取镜像[rootshjava101 ~]# docker pull mysql:5.7第二步查看镜像是否拉取成功[rootshjava101 ~]# docker images mysql:5.7REPOSITORY TAG IMAGE ID CREATED SIZE mysql5.7c20987f18b1312months ago 448MB第三步运行镜像运行 MySQL 的镜像的命令是什么我们进入 https://hub.docker.com/ 搜索 MySQL 镜像可以看到这个命令的描述[rootshjava101 ~]# docker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7注意一定要保证 Linux 里面没有运行的 MySQL如果有的话端口映射 3307。否则会报异常。[rootshjava101 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1815bbc70d06 mysql:5.7docker-entrypoint.s…53seconds ago Up51seconds33060/tcp,0.0.0.0:3307-3306/tcp, :::3307-3306/tcp recursing_allen第四步进入容器内部登录 MySQL 数据库[rootshjava101 ~]# docker exec -it 1815bbc70d06 /bin/bashroot1815bbc70d06:/# mysql -u root -pEnter password: Welcome to the MySQL monitor. Commands end with;or\g. Your MySQL connectionidis2Server version:5.7.36 MySQL Community Server(GPL)Copyright(c)2000,2021, 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. Typehelp;or\hforhelp. Type\ctoclearthe current input statement. mysqlmysqlshow databases;--------------------|Database|--------------------|information_schema||mysql||performance_schema||sys|--------------------4rowsinset(0.03sec)第五步使用 sqlYog 工具来连接 MySQL我们发现连接成功。大家思考目前运行的容器有没有什么问题首先我们在运行容器的时候没有指定字符编码集可能会存在插入中文出现乱码的情况还有就是如果我们删除容器之后容器里面存在的数据怎么办所以我们需要对我们安装步骤进行优化。首先我们删除之前运行的 MySQL 容器:[rootshjava101 ~]# docker stop 1815bbc70d06 # 停止mysql容器1815bbc70d06[rootshjava101 ~]# docker rm -f 1815bbc70d06 # 删除mysql容器1815bbc70d067.2.2 实战版本安装第一步运行 MySQL 容器[rootshjava101 /]# docker run -d -p 3307:3306 --privilegedtrue -v /opt/mysql/log:/var/log/mysql -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD123456 --name mysql mysql:5.7我们这个时候实现数据卷挂载将 MySQL 相关的运行数据同步到宿主机的指定目录。第二步新建 my.cnf[rootshjava101 /]# cd /opt/mysql/conf/[rootshjava101 conf]# vim my.cnf我们编辑[client] default_character_setutf8 [mysqld] collation_server utf8_general_ci character_set_server utf8第三步重新启动 MySQL 容器实例再重新进入并查看字符编码由于修改了配置我们最好将容器重新启动一下[rootshjava101 conf]# docker restart 0a992c086f8e0a992c086f8e第四步进入容器并登录 MySQL 数据库[rootshjava101 conf]# docker exec -it 0a992c086f8e /bin/bashroot0a992c086f8e:/# mysql -u root -pEnter password: Welcome to the MySQL monitor. Commands end with;or\g. Your MySQL connectionidis2Server version:5.7.36 MySQL Community Server(GPL)Copyright(c)2000,2021, 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. Typehelp;or\hforhelp. Type\ctoclearthe current input statement. mysql我们查看 Mysql 数据库的字符编码集mysqlshow variables likecharacter%;------------------------------------------------------|Variable_name|Value|------------------------------------------------------|character_set_client|utf8||character_set_connection|utf8||character_set_database|utf8||character_set_filesystem|binary||character_set_results|utf8||character_set_server|utf8||character_set_system|utf8||character_sets_dir|/usr/share/mysql/charsets/|------------------------------------------------------8rowsinset(0.00sec)第五步创建数据表插入数据我们在 MySQL 里面创建数据表并插入数据我们进入数据卷挂载的目录查看数据是否存在[rootshjava101 mysql]# cd /opt/mysql/data我们发现我们创建的数据成功的保存到数据卷对应的挂载目录了。7.3 安装 Redis7.3.1 简单安装第一步拉取镜像[rootshjava101 /]# docker pull redis:6.0.8第二步查看镜像是否存在[rootshjava101 /]# docker images redis:6.0.8REPOSITORY TAG IMAGE ID CREATED SIZE redis6.0.8 16ecd27729342years ago 104MB第三步运行镜像[rootshjava101 /]# docker run -d -p 6379:6379 redis:6.0.85d46714dbbd53644af02ec77954a6d9c5fc593443be5cc76d2631fc826db2388第四步进入容器内部[rootshjava101 /]# docker exec -it 5d46714dbbd5 /bin/bashroot5d46714dbbd5:/data# ls -ltotal0root5d46714dbbd5:/data# redis-cli127.0.0.1:6379setusername eric OK127.0.0.1:6379get usernameeric127.0.0.1:6379我们发现可以正常运行并可以插入数据。但是现在存在的问题就是当容器删除之后Redis 容器里面的数据也不会保存。所以我们在运行容器的时候需要使用数据卷进行挂载。我们先退出并删除容器:root5d46714dbbd5:/data# exitexit[rootshjava101 /]# docker rm -f 5d46714dbbd55d46714dbbd57.3.2 实战版安装第一步我们在宿主机下面创建目录[rootshjava101 /]# cd /opt[rootshjava101 /]# mkdir -p app/redis第二步将一个 redis.conf 文件模板拷贝进 /opt/app/redis 目录下[rootshjava101 opt]# cp redis.conf /opt/app/redis/[rootshjava101 opt]# cd /opt/app/redis[rootshjava101 redis]# lltotal92-rw-r--r--.1root root92242Dec2921:33 redis.conf第三步/opt/app/redis 目录下修改 redis.conf 文件允许 Redis 外部连接daemonize no将 daemonize yes 注释起来或者 daemonize no 设置因为该配置和 docker run 中 -d 参数冲突会导致容器一直启动失败开启 Redis 数据持久化 appendonly yes第四步使用 redis6.0.8 镜像创建容器也叫运行镜像[rootshjava101 redis]# docker run -p 6379:6379 --name myredis --privilegedtrue -v /opt/app/redis/redis.conf:/etc/redis/redis.conf -v /opt/app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf1e41c9e23d443ad9f558f723d396e4cb44ec349f481428321137889ac4b8185c第五步测试客户端root1e41c9e23d44:/data# redis-cli127.0.0.1:6379setusername eric OK127.0.0.1:6379get usernameeric到目前我们在 Docker 里面安装的 Redis 也成功了。