一、安装docker
1.查看内核版本
uname -r
💡 Tips: docker要求CentOS系统的内核版本高于 3.10
2.更新 yum 包
yum update
3.安装软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
💡 Tips: yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
4.设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5.查看所有docker版本
yum list docker-ce --showduplicates | sort -r
6.安装
yum install -y docker-ce docker-ce-cli containerd.io
7.检查安装是否成功
docker -v
8.启动docker
systemctl start docker
9.简单常用的命令
几个常用的 具体可自行百度
启动docke:
systemctl start docker
重启docker:
systemctl restart docker
帮助:
docker --help
查看docker 镜像列表:
docker images
搜索镜像:
docker search 镜像名
拉取镜像:
docker pull 镜像名
删除镜像:
docker rmi -f 镜像名/镜像ID
查看真在在运行的容器:
docker ps
查看所有容器列表(包括已停止的):
docker ps -a
停止容器:
docker stop 容器名/容器ID
重启容器:
docker restart 容器名/容器ID
删除容器:
docker rm -f 容器名/容器ID
进入容器内部:
docker exec -it 容器名/容器ID /bin/bash
二、安装nginx及配置
1.docker搜索
docker search nginx
💡 Tips:可搜索相关的所有nginx信息建议去dockerhub中查询,可清晰的看到对应版本信息
2.拉取镜像
docker pull nginx
💡 Tips:默认是最新版本,如果需要指定版本:版本号。例 docker pull nginx:1.20.1
3.查看本地镜像
docker images
4.启动测试
docker run --name nginx -p 80:80 -d nginx
💡 命令详解释: 拆分
docker run 启动一个镜像
--name nginx 表示为当前容器起一个别名 当前取名就为 nginx
-d 表示后台允许
-p 80:80 表示将本机的80端口映射到nginx镜像的80端口
nginx 镜像 REPOSITORY标识 也可以是docker images 查看镜像id nginx对象的id
访问地址出现nginx 画面即为成功
5.配置nginx
5-1.创建文件夹
mkdir -p /home/nginx/www /home/nginx/logs /home/nginx/conf/conf.d /home/nginx/ssl
💡 Tips:创建需要映射的文件夹(可自行选择 怎么方便怎么来) 此例为/home/nginx下四个文件 主要作用为:
www:映射nginx存储网站网页的目录
logs: 映射nginx日志目录
conf: 映射nginx配置文件目录
ssl: 映射ssl文件目录
5-2.拷贝容器内 内容到本地
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/
docker cp nginx:/etc/nginx/conf.d/ /home/nginx/conf/
💡 命令解释:
docker cp:拷贝
nginx:容器名字
/etc/nginx/nginx.conf :这里是容器内部 nginx 固定定制不需要改变
/home/nginx/conf/ :这里是上面配置 本地映射创建文件夹的位置
第二行同理
第一行:拷贝nginx容器内的nginx.conf配置文件
第二行:拷贝nginx容器内的default.conf,example_ssl.conf配置文件
5-3. 删除旧的容器
docker stop nginx
docker rm nginx
5-4.配置新的ngxin容器带上映射地址
docker run -d -p 80:80 -p 443:443 --name nginx -v /home/nginx/www:/usr/share/nginx/html -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/nginx/logs:/var/log/nginx -v /home/nginx/ssl:/etc/nginx/ssl nginx
#下述代码是换行之后的样式 为了方便理解!!!复制选择上面这一行
docker run -d -p 80:80 -p 443:443 --name nginx
-v /home/nginx/www:/usr/share/nginx/html
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d
-v /home/nginx/logs:/var/log/nginx
-v /home/nginx/ssl:/etc/nginx/ssl
nginx
💡 命令解释: 重要!!!! 这里是一行代码 下面3-9行的是为了方便理解的
/home/nginx/www : /usr/share/nginx/html
冒号前面 是本地映射地址 冒号后面是nginx容器内部地址 冒号前由自己定义 冒号后不可更改
5-4.放置前端文件
这时候访问地址会出现403的情况,先不要着急 因为nginx映射到本地而本地没有文件,
将打包后的前端项目放入映射地址 /home/nginx/www 如上文中 www这个文件夹里
这时访问会出现 前端 index.html 内容
5-5.配置nginx.conf
上文做了映射后 ,后续改动只需要改动本地文件即可
此刻我们找到 /home/nginx/conf/conf.d 里面的default.conf 文件 (这个目录是上文中 自己配置的映射目录)
简单配置如下:
server {
listen 80; #侦听80端口 访问url 默认80端口
server_name localhost;#服务器名字
ssl_session_timeout 5m;
location /{
root /usr/share/nginx/html;#这里为nginx容器内路径 部署项目文件放在对应的映射地址
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html; #重定向错误页面到 /50x.html
location = /50x.html {
root /usr/share/nginx/html;
}
}
具体可以搜索nginx 配置 这里先忽略
如需要配置https 忽略申请证书 可自行百度
server{
listen 443 ssl;
server_name www.xxxx.cn;#自己的域名
ssl_certificate /etc/nginx/ssl/xxxx.pem;//证书下载的pem文件名 放入上文映射的地址
ssl_certificate_key /etc/nginx/ssl/xxxx.key;//证书下载的key文件名 放入上文映射的地址
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
#监听80端口,并重定向到443
server{
listen 80;
server_name www.xxxx.cn;#自己的域名
rewrite ^/(.*)$ https://www.piptop.cn:443/$1 permanent;
}
5-6.重启docker nginx
💡 每次更改nginx配都需要重启
docker restart nginx #自行定义的容器名字
三、部署redis
1.下载redis.conf
download.redis.io/redis-stabl… 点击下载
2.服务器开通6379端口
3.下载redis镜像
docker pull redis
4.启动
docker run -itd -p 6379:6379 --name redis -v /home/redis/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data redis redis-server /etc/redis/redis.conf
-p 6379:6379 挂载6379端口
–name 容器名字
/home/redis/myredis/redis.conf : /etc/redis/redis.conf 冒号前面是本地路径冒号后面是容器内部路径 总共两个文件 redis.conf和data文件夹 提前再前面的路径下创建号
redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件
5.验证
docker exec -it myredis redis-cli
get xx #随便输入
#(error)NOAUTH Authentication required 表示需要输入密码
auth 密码
#验证通过 会出现ok
set s1 aaa
#出现ok表示配置成功
#Ctrl+P+Q 可以退出容器
附个配置(具体意思可以百度):
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1
protected-mode no
port 6379
tcp-backlog 511
requirepass 000415
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
四、部署mongodb
1.拉取镜像
docker pull mongo
2.服务器开 27017端口
3.启动
docker run -itd --name mongo -p 27017:27017 mongo --auth
--auth 需要密码才能访问容器服务
docker exec -it mongo mongo admin #进入容器
#创建用户
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接
db.auth('admin', '123456')
五、部署mysql
1.拉取mysql镜像
docker pull mysql
#注意这样会拉取最新的mysql 需要指定的 可以docker pull mysql:5.7 建议5.7
2.开启服务器3306端口
3.运行容器
docker run -d --name myMysql -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql
💡命令解析:
MYSQL_ROOT_PASSWORD=123456 初始化 root 用户的密码
-p 3306:3306 映射3306端口
--name myMysql 取别名叫myMysql
/home/mysql/data : /var/lib/mysql data目录为mysql配置的数据文件存放路径,存储数据的
4.检查
docker exec -it myMysql bash #进入容器
mysql -u root -p #登录
#这时候会弹出password 输入界面
#输入密码验证
#如遇到上面设置的密码不生效 初始密码123456
5.可能出现的问题
[Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
[Note] [Entrypoint]: Switching to dedicated user 'mysql'
[Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
ls: cannot access '/docker-entrypoint-initdb.d/': Operation not permitte
docker 没有足够的权限访问文件,只需要在docker run上加上 --privileged问题即可解决
六、部署node
1.安装Node.js镜像
docker pull node
2.创建Dockerfile
💡 在所部署的 node项目根目录
FROM node:latest
# 指定制作我们的镜像的联系人信息(镜像创建者)
MAINTAINER EOI
# 将根目录下的文件都copy到container(运行此镜像的容器)文件系统的app文件夹下
ADD . /app/
# cd到app文件夹下
WORKDIR /app
# 安装项目依赖包
RUN npm install
# 配置环境变量
ENV HOST 0.0.0.0
ENV PORT 3000
# 容器对外暴露的端口号
EXPOSE 3000
# 容器启动时执行的命令,类似npm run start
CMD ["npm", "start"]
3.创建镜像image
docker build -t mynode .
💡 特别注意:最后有一位 .
这里mynode自行取的镜像名字
4.启动容器
docker run --restart=always -d -p 3000:3000 mynode
七、遇到问题排错方法
docker ps #可以看到当前正在运行的容器
docker ps -a #可以看到当前所有容器 包括 启动失败的容器
docker stop 容器id/容器名 #停止某个容器
docker images #查看所有镜像
docker rmi 镜像名字 #删除镜像
docker logs 容器id/容器名 #查看失败容器没有 启动成功原因
docker rm $(docker ps --all -q -f status=exited) #清除失败的容器
docker exec -it 容器名/容器id bash #进入容器内部 进入容器内部后可执行当前容器操作
ctrl+p+q#退出容器内部
- 一般启动成功可以 通过docker ps查看容器列表
- 如果发现没有,说明启动容器失败,那么通过加上-a命令 查看所有 获取失败的id
- 查看日志 获取失败原因,修改
- 清理启动失败的容器,重新启动
- 如遇到启动成功还是有问题,可以通过进入容器内部查看具体报错地方