Docker及主要软件的安装(基于centos 7 以及 root 用户)

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

search mysql

3.1.2 拉取 MySQL 的镜像新版本

笔者这里拉取的是最新版本(最好拉取官方镜像)

docker pull mysql:5.7

3.1.3 查看docker镜像

docker images

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

search redis

3.2.2 拉取 Redis 镜像

docker pull redis

3.2.3 查看docker镜像

 docker images

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容器

登陆redis的示意图

3.3 mongoDB安装

3.3.1 查看mongo,寻找合适的镜像

docker search mongo

search mongo

3.3.2 拉取mongo镜像

docker pull mongo:4.2.3

3.3.3 查看docker镜像

docker images

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容器

登陆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

docker nginx

3.4.2 拉取nginx镜像

docker pull nginx:1.17.9

3.4.3 查看docker镜像

docker images

dpcker 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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章