yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
如果装了python3,并设置了环境变量,需要修改/usr/bin/yum-config-manager,指向python2。没有安装python3,请忽略。
yum install docker-ce
docker -v
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"]
}
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker
docker info
docker --help
docker images
命令之后的显示
Repository: 镜像名称
Tag: 镜像标签
Imageid: 镜像ID
Created: 镜像的创建日期(不是获取该镜像的日期)
Size: 镜像大小
这些镜像是存储在Docker宿主机的/var/lib/docker目录下
docker search 镜像名称
查询之后的结果:
Name: 仓库名称
Description: 镜像描述
Stars: 用户评价, 反应一个镜像的受欢迎程度
Official: 是否官方
Automated: 自动构建, 表示该镜像由Docker Hub自动构建流程创建的
docker pull 镜像名称
docker pull tomcat:8
拉取镜像就是从中央仓库中下载镜像到本地
按照镜像ID删除镜像
docker rmi 镜像ID
删除所有镜像:
docker rmi `docker images -q`
查看正在运行的容器
docker ps
查看最后一次运行的容器
docker ps -l
查看所有容器:
docker ps -a
查看停止的容器
docker ps -f status-exited
创建容器命令
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
docker start 容器名称(或者容器ID)
docker restart 容器名称(或者容器ID)
docker stop 容器名称(或者容器ID)
需要将文件拷贝到容器中可以使用cp命令
docker cp 需要拷贝的文件或者目录(宿主机) 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录(宿主机)
说明: 宿主机目录与容器目录映射, 当修改任意一方目录及其文件的时候, 另一方目录也会发生相应改变
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos centos:7
查看容器的所有数据
docker inspect 容器名称(或者容器ID)
也可以从所有数据中进行筛选, 如下我要筛选容器IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(或者容器ID)
docker search mysql
笔者这里拉取的是最新版本(最好拉取官方镜像)
docker pull mysql:5.7
docker images
cd /opt/docker/mysql
mkdir -p data conf
cd /opt/docker/mysql/conf
touch my.cnf
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
以后不论你们做什么镜像,凡是挂载目录切记要为目录赋予权限否则,运行镜像后会发现status 状态为exited。
chmod -R 777 mysql
修改文件的权限,修改为只有root用户可读可写
cd /opt/docker/mysql/conf
chmod 644 my.cnf
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就可以开机启动了。
firewall-cmd --list-ports
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --query-port=3306/tcp
docker search redis
docker pull redis
docker images
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no #默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
databases 15 #数据库个数(可选)
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
cd /opt/docker/redis/conf
mkdir -p conf data
笔者不再赘述,请参考mysql设置权限的方式
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" 设置访问密码
笔者不再赘述,请参考mysql开启端口方式
docker search mongo
docker pull mongo:4.2.3
docker images
cd /opt/docker/mongo
mkdir db
笔者不在赘述,请参考mysql设置权限的方式
docker run -p 27017:27017
-v /opt/docker/mongo/db:/data/db
--name mongo
-di mongo:4.2.3 --auth
解释说明:
–auth 开启mongoDB的认证授权
笔者不再赘述,请参考mysql开启端口方式
db.createUser({ user: 'root', pwd: 'root',
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
docker search nginx
docker pull nginx:1.17.9
docker images
cd /opt/docker/nginx #不存在请自行创建
mkdir -p conf log html
mkdir conf/conf.d
笔者不再赘述,请参考mysql设置权限的方式
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
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>
Welcome to nginx!</title>