docker
注意:本文中docker安装在服务器上
0. linux部分常用指令
1.结束进程
kill 进程号
例子
kill 32621
2.查看指定进程
ps -ef|grep 进程号
例子
ps -ef|grep 32621
3.启动指定名称的服务
service 服务名 start
例子
service mysql start
4.查看指定服务名称的状态
service 服务名 status
例子
service mysql status
5.关闭指定名称的服务
service 服务名 stop
例子
service mysql stop
6.查看目录
ll
7.查询根目录下(包括子目录),名为b的目录和文件
find / -name 'b'
8.查询根目录下(包括子目录),名以b开头的目录和文件
find / -name 'b*'
1. docker常用指令
docker search 镜像名称 //搜索镜像
docker pull 镜像名称:版本号 //拉取对应版本的镜像
docker pull 镜像名称 //默认拉取最新的镜像
docker images //查看本地已下载的镜像
docker ps //查看正在运行的容器
docker ps -a //查看所有的容器(包括run、stop、exited状态的)
docker container ls //查看正在运行的容器
docker rm 容器ID //只能删除没有在运行的容器
docker rm -f 容器ID //可以删除正在运行的容器
docker run -p 本地主机端口号:容器服务端口号 --name 容器名字 [-e 配置信息修改] -d 镜像名字
docker start 容器ID //启动容器
docker stop 容器ID //终止容器
docker rmi 镜像名称orID //删除镜像
2. docker安装mysql
- docker仓库搜索mysql
docker search mysql
- docker仓库拉取mysql8.0
拉取8.0版本
docker pull mysql:8.0
不指定版本 则拉去最新版本
docker pull mysql
3.查看本地仓库镜像是否下载成功
docker images mysql:8.0
4.安装容器
需要注意的点:
在没有加
--privileged=true
时,安装容器之后,容器启动失败
查看日志中的信息
[root@VM-0-9-centos ~]# docker logs -f 85e630fdff69
2022-07-22 01:15:40+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.29-1.el8 started.
2022-07-22 01:15:40+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2022-07-22 01:15:40+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.29-1.el8 started.
ls: cannot access '/docker-entrypoint-initdb.d/': Operation not permitted
添加之后,容器启动成功
docker run -p 3307:3306 --name mysql8.0 --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
语句啥意思
docker run -p 3307:3306 --name mysql8.0 --privileged=true -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
-p 服务器端口号:服务器的docker中mysql容器端口号
将服务器的端口映射到docker容器端口(因为服务器的3306端口已被mysql占用,所以使用3307)
服务器也安装了mysql 占用3306端口
--name 自定义容器名
--priviledge=true
容器内的root拥有真正的root权限,否则容器内的root只是外部的一个普通用户权限
-e 配置信息,配置ROOT的密码
-e MYSQL_ROOT_PASSWORD=用户密码
-d 镜像名
- docker登录mysql
docker exec -it mysql8.0 bash
mysql -uroot -p
键入数据库密码
- 使用navicat登录mysql
由于要连接服务器的docker中安装的mysql 所以主机为 服务器ip地址
本地端口号3306运行着 计算机的mysql
所以使用3307端口来映射服务器docker中的mysql3306端口
点击"确定",连接失败,报错为
navicat不支持caching_sha_password加密方式
原因:mysql8.0使用了新的密码加密方式:caching_sha_password
解决方法,修改root@localhost为旧的加密方式,并重置密码
操作步骤
1.cmd运行mysql 键入密码
mysql -h localhost -u root -p
2.查看root用户的加密方式
select user,plugin from user where user='root';
3.查看root用户的ip位置(host)
select user,host from user;
发现为localhost 本地
4.修改root的加密方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'
root'@'localhost 为修改的用户名和ip地址
mysql_native_password 为加密方式
123456 为 修改的密码
5.再次查看root用户的加密方式
select user,plugin from user where user='root';
root的加密方式已经修改为mysql_native_password
6.点击navicat中新建连接的"确定",连接成功
3. docker安装redis
- docker仓库搜索redis
docker search redis
- docker仓库拉取redis6.2.4
docker pull redis:6.2.4
- 查看本地仓库镜像是否下载成功
docker images redis:6.2.4
- 安装并启动redis容器
docker run --name redis6.2.4 -p 6380:6379 -d --restart=always redis:6.2.4 redis-server --appendonly yes --requirepass "123456"
上面语句啥意思
-d 让容器在后台运行
--name 自定义容器名
-p 服务器本地端口号:服务器的docker中redis容器端口号
将服务器的端口映射到docker容器端口(因为服务器的6379端口已被redis占用,所以使用6380)
服务器也安装了redis 占用6379端口
--restart=always
重启docker时,自动启动该容器
redis:6.2.4 为容器使用的镜像名
redis-server 在容器内执行redis-server命令
--appendonly yes
开启redis持久化
--requirepass 访问redis的密码
- docker登录redis
进入redis6.2.4容器
docker exec -it redis6.2.4 /bin/bash
打开redis客户端
redis-cli
执行ping命令
ping
输入密码
auth 密码
再ping
ping
4. docker安装nginx
- docker仓库拉取nginx1.18.0
docker pull nginx:1.18.0
- 查看本地仓库镜像是否下载成功
docker images nginx:1.18.0
- 安装并启动nginx容器
docker run --name nginx1.18.0 -p 80:80 -d nginx:1.18.0
- 容器的重启,重新加载
docker exec -t 容器id nginx -t
docker exec -t 容器id nginx -s reload
4.11 nginx的配置
- 创建文件目录
需要找到docker文件夹在哪
find / -name 'docker'
在docker文件夹下 创建文件夹
mkdir -p /xxx/docker/nginx/conf/conf.d 存放你自己的项目的nginx配置的文件夹
mkdir -p /xxx/docker/project 存放你自己的项目文件的文件夹
mkdir -p /xxx/docker/nginx/html 存放静态文件
mkdir -p /xxx/docker/nginx/ssl 存放你的域名SSL证书的文件夹
mkdir -p /xxx/docker/nginx/logs 存放nginx的日志文件的文件夹
(xxx:是你自己存放这些文件的根目录)
本服务器的 /xxx/为 /var/lib/
查看文件夹是否成功建立
cd /var/lib/docker
ll
- 获取之前安装并启动的nginx容器id
查看指定服务名称的信息
docker ps|grep nginx1.18.0
- 将该容器的默认配置 拷贝到建立的文件夹中
docker cp 41018cb2483c:/etc/nginx/nginx.conf /xxx/docker/nginx/conf/nginx.conf
docker cp 41018cb2483c:/etc/nginx/conf.d /xxx/docker/nginx/conf
docker cp 41018cb2483c:/usr/share/nginx/html /xxx/docker/nginx
/xxx/ 本服务器的路径为 /var/lib
docker cp 41018cb2483c:/etc/nginx/nginx.conf /var/lib/docker/nginx/conf/nginx.conf
docker cp 41018cb2483c:/etc/nginx/conf.d /var/lib/docker/nginx/conf
docker cp 41018cb2483c:/usr/share/nginx/html /var/lib/docker/nginx
拷贝之后,停止并删除容器
docker stop 41018cb2483c
docker rm 41018cb2483c
- 创建nginx容器并启动服务
docker run \
-p 80:80 \
--name 自定义nginx服务名 \
--restart=always \
-v /xxx/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /xxx/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /xxx/docker/nginx/html:/usr/share/nginx/html \
-v /xxx/docker/nginx/logs:/var/log/nginx \
-v /xxx/docker/project:/root/project \
-d \
nginx的镜像名
-v -> 宿主机与容器的映射关系,即-v 宿主机的目录:容器的目录
(/xxx/ 在本服务器中为 /var/lib/)
实例
[root@VM-0-9-centos docker]# docker run \
> -p 80:80 \
> --name nginx1.18.0 \
> --restart=always \
> -v /var/lib/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
> -v /var/lib/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
> -v /var/lib/docker/nginx/html:/usr/share/nginx/html \
> -v /var/lib/docker/nginx/logs:/var/log/nginx \
> -v /var/lib/docker/project:/root/project \
> -d \
> nginx:1.18.0
d1a7b528da05fcf1738fe7ed201a40a6f9a68ab5779926f8048bc0da07d6b689
[root@VM-0-9-centos docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1a7b528da05 nginx:1.18.0 "/docker-entrypoint.…" 6 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp nginx1.18.0
947d1a4c1914 redis:6.2.4 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:6380->6379/tcp redis6.2.4
a562042b80ed mysql:8.0 "docker-entrypoint.s…" 6 hours ago Up 6 hours 33060/tcp, 0.0.0.0:3307->3306/tcp mysql8.0
注意
nginx启动时将 容器内的目录 和 宿主机的目录 添加了映射关系,即/etc/nginx/conf.d 等同于 /xxx/docker/nginx/conf/conf.d
- 部署项目时的nginx配置
执行以下命令,查看nginx.conf文件内容
cd /var/lib/docker/nginx/conf
ll
vim nginx.conf
文件内容
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
分析
文件的最下方
include /etc/nginx/conf.d/*.conf;
nginx加载配置文件时 会加载conf.d文件夹下的所有带.conf后缀的配置文件。
容器中的nginx配置路径为 /etc/nginx/conf.d
之前在配置时 为 容器的目录和宿主机的目录添加了映射关系 即/etc/nginx/conf.d/*.conf 等同于 /xxx/docker/nginx/conf/conf.d
在添加项目的nginx的配置时,只需要在/xxx/docker/nginx/conf/conf.d目录下新增一个 配置文件名.conf文件,文件格式必须为
server{
xxx;
location / {
xxxx;
}
}
.
.
server{
xxx;
location / {
xxxx;
}
}