对于前端工程的docker运维知识

一、安装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

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

(http://download.redis.io/redis-stable/redis.conf)复制到浏览器自动下载

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文件夹 提前再前面的路径下创建号

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
  • 查看日志 获取失败原因,修改
  • 清理启动失败的容器,重新启动
  • 如遇到启动成功还是有问题,可以通过进入容器内部查看具体报错地方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街头炒河粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值