Docker学习(二):安装软件

1. Docker常用软件安装

搜索镜像

拉取镜像

查看镜像

运行镜像

停止镜像

移除镜像

1.1 Docker安装tomcat

#搜索tomcat
docker search tomcat
#拉取tomcat
docker pull tomcat
#查看tomcat镜像
docker images tomcat
#运行镜像
docker run -d -p 8080:8080 tomcat
#访问
http://ip:8080
#最新版tomcat坑
#进入tomcat容器实例
docker exec -it tomcat容器名/tomcat容器Id /bin/bash
#查看webapps目录为空
#解决1:删除webapps目录,将tomcat目录下的webapps.dist 修改为 webapps 
rm -rf webapps
mv webapps.dist webapps
#再次访问成功,出现tomcat小猫
http://ip:8080
#解决2:拉取无需修改的tomcat版本,其webapps目录不为空,可直接访问
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8081:8080 --name=mytomcat8 billygoo/tomcat8-jdk8
#访问,网络问题无法拉取该镜像,待测试
http://ip:8081

1.2 Docker安装mysql

1.2.1简单版

#以安装mysql:5.7为例
#搜索mysql
docker search mysql
#拉取mysql:5.7
docker pull mysql:5.7
#查看
docker images
#创建mysql:5.7容器实例
#启动前查看3306端口是否被占用
lsof -i:3306
ps -ef | grep 3306
#官网启动命令
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker run -d -p 3306:3306 --name=dockermysql5.7 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
#进入容器
docker exec -it dockermysql5.7 /bin/bash
#进入mysql,输入密码
mysql -uroot -p
#建库建表crud数据
show databases;
create database db1;
use db1;
create table t1(id int , name varchar(50));
insert into t1 values(1,'a1');
select * from t1;
update t1 set name = 'newa1' where id = 1; 
delete from t1 where id = 1;
#自己电脑使用工具连接数据库,建库建表crud数据
Test by yourselves!
#坑:docker默认字符集latin1,导致插入中文数据报错
show variables like 'character%';
#存在问题:1:字符 2:容器与数据库数据同在,容器被删除数据库数据就荡然无存!

1.2.2 实战版

#挂载容器卷,完成数据库数据文件、日志文件、配置文件的同步与持久化
docker run -d -p 3306:3306 --name=dockerprodmysql5.7 --privileged=true
-v /hsp/docker/mysql/log:/var/log/mysql
-v /hsp/docker/mysql/data:/var/lib/mysql
-v /hsp/docker/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
#解决1:中文数据报错问题
cd /hsp/docker/mysql/conf
#添加配置文件my.cnf,新加配置
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
#重启dockerprodmysql5.7容器实例以保证配置生效
docker restart dockerprodmysql5.7
#进入容器查看配置文件
docker exec -it dockerprodmysql5.7 /bin/bash
cat/etc/mysql/conf.d/my.cnf
#进入mysql,输入密码
mysql -uroot -p
#查看mysql字符集都为utf8,配置成功
show variables like 'character%';
#进入mysql,建库建表crud数据
show databases;
create database db1;
use db1;
create table t1(id int , name varchar(50));
insert into t1 values(1,'a1');
select * from t1;
update t1 set name = 'newa1' where id = 1; 
delete from t1 where id = 1;
#自己电脑使用工具连接数据库,建库建表crud数据
Test by yourselves!
#插入中文数据成功,无报错
insert into t1 values(3,'中文测试');
#解决2:通过挂载容器卷使容器敏感数据持久化、备份在宿主机
#删除刚才测试数据的容器
docker rm -f dockerprodmysql5.7
#新启动mysql5.7实例,挂载刚才的容器卷,使恢复数据库日志、数据文件、配置文件
docker run -d -p 3306:3306 --name=dockerprod2mysql5.7 --privileged=true
-v /hsp/docker/mysql/log:/var/log/mysql
-v /hsp/docker/mysql/data:/var/lib/mysql
-v /hsp/docker/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
#进入新启动的mysql容器
docker exec -it dockerprod2mysql5.7 /bin/bash
#进入mysql,验证原来库、表、表数据是否存在以及配置是否生效
Test by yourselves!
#结果:数据库数据文件、日志文件、配置文件仍一致

1.3 Docker安装Redis

#搜索镜像
docker search redis
#拉取Redis镜像
docker pull redis
#简单运行
docker run -d -p 6379:6379 --name=myredis redis
#进入容器
docker exec -it myredis /bin/bash
#进入redis,测试redis操作
redis-cli
ping
set k1 v1
get k1
#存在问题:1.redis容器与数据生命周期一致,需备份数据 2.redis容器根据配置启动
#挂载容器卷,持久化、同步redis数据以及配置文件
#宿主机新建目录导入redis.conf
#修改redis.conf,允许redis外地连接
#注释bind 127.0.0.1
#修改后台启动为no,否则与docker run -d参数冲突
#挂载数据卷及指定配置文件启动redis容器实例
docker run -d --name=myredis --privileged=true 
-p 6379:6379
-v /app/redis/redis.conf:/etc/redis/redis.conf 
-v /app/redis/data:/data 
redis redis-server /etc/redis/redis.conf
#通过修改redis db数量来验证redis.conf生效

1.4 Docker安装Nginx

#搜索镜像
docker search --limit 5 nginx
#拉取nginx镜像
docker pull nginx
#简单运行
docker run -d  --name=mynginx -p 35672:80 nginx
#访问测试
http://192.168.216.118:35672/
Welcome to nginx!
#挂载数据卷 指定配置文件运行
#踩坑:官方的nginx默认以默认配置文件启动 /etc/nginx/conf.d/default.conf 并不是以nginx.conf启动
docker run --name=mynginx --privileged=true -p 36572:80 -v /app/nginx/shareFiles:/app/nginx/shareFiles -v /app/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf  -d nginx
#指定配置文件启动
docker run --name=mynginx --privileged=true -p 36572:80 -v /app/nginx/shareFiles:/app/nginx/shareFiles -v /app/nginx/nginx.conf:/etc/nginx/nginx.conf  -d nginx nginx -g "daemon off;" -c /etc/nginx/nginx.conf
#需注释这行 #include /etc/nginx/conf.d/*.conf 或者删除里面的配置文件
#nginx作文件分享下载配置
location  /downloadFileTest {
        #需要下载的文件存放的目录
          alias  /app/nginx/shareFiles/;
          sendfile on;
          autoindex on;  # 开启目录文件列表
          autoindex_exact_size on;  # 显示出文件的确切大小,单位是bytes
          autoindex_localtime on;  # 显示的文件时间为文件的服务器时间
          charset utf-8,gbk;  # 避免中文乱码
          }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值