1 Docker的安装及启动
1.1安装docker
- yum包更新到最新
yum update
- 安装需要的软件包,yun-uti提供yun-config-manager功能, 另两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置阿里云的docker yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
如果装了python3,并设置了环境变量,需要修改/usr/bin/yum-config-manager,指向python2。没有安装python3,请忽略。
- 安装docker
yum install docker-ce
- 安装后查看docker版本
docker -v
1.2 设置USTC镜像
ustc是老牌Linux镜像服务提供者, ustc的docker镜像加速器速度很快, ustc docker mirror的优势之一就是不需要注册, 是真正的公共服务。
- 编辑文件
cd /etc/docker #如果该路径不存在,请自行建立
touch daemon.json
chmod 777 daemon.json
- 在文件输入以下内容
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
1.3 docker的启动与停止
- 启动docker
systemctl start docker
- 停止docker
systemctl stop docker
- 重启docker
systemctl restart docker
- 查看docker状态
systemctl status docker
- 开机启动
systemctl enable docker
- 查看docker概要信息
docker info
- 查看docker帮助文档
docker --help
2 Docker的常用命令
2.1 镜像的相关命令
2.1.1 查看镜像
docker images
命令之后的显示
Repository: 镜像名称
Tag: 镜像标签
Imageid: 镜像ID
Created: 镜像的创建日期(不是获取该镜像的日期)
Size: 镜像大小
这些镜像是存储在Docker宿主机的/var/lib/docker目录下
2.1.2 搜索镜像
docker search 镜像名称
查询之后的结果:
Name: 仓库名称
Description: 镜像描述
Stars: 用户评价, 反应一个镜像的受欢迎程度
Official: 是否官方
Automated: 自动构建, 表示该镜像由Docker Hub自动构建流程创建的
2.1.3 拉取镜像
docker pull 镜像名称
docker pull tomcat:8
拉取镜像就是从中央仓库中下载镜像到本地
2.1.4 删除镜像
按照镜像ID删除镜像
docker rmi 镜像ID
删除所有镜像:
docker rmi `docker images -q`
2.2 容器的相关命令
2.2.1 查看容器
查看正在运行的容器
docker ps
查看最后一次运行的容器
docker ps -l
查看所有容器:
docker ps -a
查看停止的容器
docker ps -f status-exited
2.2.2 创建和启动容器
创建容器命令
docker run
-i: 表示运行容器
-t: 表示容器启动后会进入其命令行
加入这两个参数后, 容器创建就能登陆进去, 即分配一个伪终端
--name: 为创建的容器命名
-v: 表示目录映射关系(前者是宿主机目录, 后者是映射到宿主机上的目录), 可以使用多个-v 做多个目录或文件映射,
注意: 最好做目录映射, 在宿主机上做修改, 然后共享到容器上.
-d: 在run后面加上-d参数, 则会创建一个守护式容器在后台运行(这样创建容器后不会自动登陆容器, 如果只加-i -t 两个参数, 创建后会自动进去容器)
-p: 表示端口映射, 前者是宿主机端口, 后者是容器内的映射端口, 可以使用多个-p做多个端口映射
-e 表示设置环境变量
交互式方式创建容器(创建完就进入容器):
docker run -it --name-容器名称 镜像名称:标签(就是TGA) /bin/bash
说明: 通过命令ps 查看, 容器处于启动状态
退出当前容器
exit
守护式方式创建容器
docker run -di --name=容器名称 镜像名称:标签
登陆守护式容器方式
docker exec -it 容器名称(或者容器id) /bin/bash
2.2.3 停止和启动容器
docker start 容器名称(或者容器ID)
docker restart 容器名称(或者容器ID)
docker stop 容器名称(或者容器ID)
2.2.4 文件拷贝
需要将文件拷贝到容器中可以使用cp命令
docker cp 需要拷贝的文件或者目录(宿主机) 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录(宿主机)
2.2.5 目录挂载
说明: 宿主机目录与容器目录映射, 当修改任意一方目录及其文件的时候, 另一方目录也会发生相应改变
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos centos:7
2.2.6 查看容器ip地址
查看容器的所有数据
docker inspect 容器名称(或者容器ID)
也可以从所有数据中进行筛选, 如下我要筛选容器IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(或者容器ID)
3 常用的软件安装
3.1 MySQL安装
3.1.1 查看MySQL,寻找合适的镜像
docker search mysql
3.1.2 拉取 MySQL 的镜像新版本
笔者这里拉取的是最新版本(最好拉取官方镜像)
docker pull mysql:5.7
3.1.3 查看docker镜像
docker images
3.1.4 创建挂载文件
- 到指定目录
cd /opt/docker/mysql
- 级联创建目录
mkdir -p data conf
- 进入本地配置文件夹
cd /opt/docker/mysql/conf
- 创建配置文件
touch my.cnf
- 填写自己的mysql配置
vim my.cnf # 如果没有安装vim,可以使用vi my.cnf
-我的配置,通常都是字符集与端口的配置,喜欢怎么配置可以自己配
[client]
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 配置大小写不敏感
lower_case_table_names=1
配置大小写不敏感
lower_case_table_names=1
3.1.5 切忌:一定要设置权限
以后不论你们做什么镜像,凡是挂载目录切记要为目录赋予权限否则,运行镜像后会发现status 状态为exited。
chmod -R 777 mysql
修改文件的权限,修改为只有root用户可读可写
cd /opt/docker/mysql/conf
chmod 644 my.cnf
3.1.6 运行并挂载目录
docker run -di --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --privileged=true
-v /opt/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf
-v /opt/docker/mysql/data:/var/lib/mysql
-v /opt/docker/mysql/logs:/var/log/mysql
--restart=always mysql:5.7
解释:
–restart=always
在docker服务重启后,自动重启mysql服务。也可以把docker作为开机启动,这样mysql就可以开机启动了。
3.1.7 查看端口是否开通
- 查看那些端口已经开通
firewall-cmd --list-ports
- 开通端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 重启防火墙
firewall-cmd --reload
- 查看端口是否开启成功
firewall-cmd --zone=public --query-port=3306/tcp
3.2 Redis安装
3.2.1 查看Redis,寻找合适的镜像
docker search redis
3.2.2 拉取 Redis 镜像
docker pull redis
3.2.3 查看docker镜像
docker images
3.2.4 创建挂载文件
3.2.4.1 从官网获取redis.conf配置文件
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no #默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
databases 15 #数据库个数(可选)
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
3.2.4.2 创建挂载的文件夹
- 进入本地配置文件夹
cd /opt/docker/redis/conf
- 级联创建目录
mkdir -p conf data
3.2.4.3 通过xftp等类似工具把上述修改好的redis.conf传到本地配置文件夹
3.2.4.4 设置挂载文件的权限
笔者不再赘述,请参考mysql设置权限的方式
3.2.4.5 启动redis
docker run -p 6379:6379 --name myredis
-v /opt/docker/redis/conf/redis.conf:/etc/redis/redis.conf
-v /opt/docker/redis/data:/data
-di redis redis-server /etc/redis/redis.conf
--appendonly yes
--requirepass "mypassword"
命令解释说明:
-p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
--name myredis 指定该容器名称,查看和进行操作都比较方便。
-v 挂载目录,规则与端口映射相同。
-d redis 表示后台启动redis
redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/opt/docker/redis/conf/redis.conf
appendonly yes 开启redis 持久化
requirepass "mypassword" 设置访问密码
3.2.4.6 开通端口
笔者不再赘述,请参考mysql开启端口方式
3.2.5 登陆redis容器
3.3 mongoDB安装
3.3.1 查看mongo,寻找合适的镜像
docker search mongo
3.3.2 拉取mongo镜像
docker pull mongo:4.2.3
3.3.3 查看docker镜像
docker images
3.3.4 创建挂载文件
3.3.4.1 到达指定的文件目
cd /opt/docker/mongo
3.3.4.2 创建挂载的文件
mkdir db
3.3.4.3 设置挂载文件的权限
笔者不在赘述,请参考mysql设置权限的方式
3.3.4.4 启动mongo
docker run -p 27017:27017
-v /opt/docker/mongo/db:/data/db
--name mongo
-di mongo:4.2.3 --auth
解释说明:
–auth 开启mongoDB的认证授权
3.3.4.5 开通端口
笔者不再赘述,请参考mysql开启端口方式
3.3.5 登陆mongo容器
3.3.5.1 创建用户
db.createUser({ user: 'root', pwd: 'root',
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
3.3.5.2 权限备注
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
3.4 nginx安装
3.4.1 查看nginx,寻找合适的镜像
docker search nginx
3.4.2 拉取nginx镜像
docker pull nginx:1.17.9
3.4.3 查看docker镜像
docker images
3.4.4 创建挂载文件
3.4.4.1 进入本地配置文件夹
cd /opt/docker/nginx #不存在请自行创建
3.4.4.2 级联创建目录
mkdir -p conf log html
mkdir conf/conf.d
3.4.4.3 通过xftp等类似工具把上述修改好的nginx.conf传到本地配置文件夹
- nginx.conf: /opt/docker/nginx/conf/nginx.conf
- defaut.conf: /opt/docker/nginx/conf/conf.d/defaut.conf
- index.html 50x.html: /opt/docker/nginx/html
3.4.4.4 设置挂载文件的权限
笔者不再赘述,请参考mysql设置权限的方式
3.4.5 启动nginx
docker run -di --name=mynginx -p 80:80
-v /opt/docker/nginx/log:/var/log/nginx
-v /opt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /opt/docker/nginx/conf/conf.d:/etc/nginx/conf.d
-v /opt/docker/nginx/html:/etc/nginx/html nginx:1.17.9
3.4.6 默认的nginx配置文件
nginx.conf : /opt/docker/nginx/conf/nginx.conf
#user nobody;
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
# 以下为外部添加配置文件
include /opt/docker/nginx/conf/conf.d/*.conf;
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream halo{
# 随机负载
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
server {
listen 80;
#server_name www.baidu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_connect_timeout 3;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_pass http://halo;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
defaut.conf : /opt/docker/nginx/conf/conf.d/defaut.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
50x.html
<!DOCTYPE html>
<html>
<head>
<title>Error</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
<p>If you are the system administrator of this resource then you should check
the error log for details.</p>
<p><em>Faithfully yours, nginx.</em></p>
</body>
</html>