Docker容器的启动

一、Docker安装数据库

1、用docker起MySQL容器

docker run --name mysql -dit -p 3306:3306 -v /root/data/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8

命令解释说明:
    -p 3306:3306 端口映射:前表示主机部分,:后表示容器部分。
    --name redis  指定该容器名称,查看和进行操作都比较方便。
    -v 挂载目录,规则与端口映射相同。
    -d redis 表示后台启动redis
    -v 映射主机路径到容器
    -e MYSQL_ROOT_PASSWORD=root 设置root用户密码
    –restart=always : 随docker启动而启动
    --lower_case_table_names=1 设置表名参数名等忽略大小写
    --privileged=true 容器root用户享有主机root用户权限

使用如下软件进行连接测试和查看使用MySQL
在这里插入图片描述

2、用docker起Redis容器

docker run -d --name redis -p 6379:6379 -v /root/data/redis:/data redis --requirepass '123456 --appendonly yes

命令解释说明:
    -p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
    --name redis  指定该容器名称,查看和进行操作都比较方便。
    -v 挂载目录,规则与端口映射相同。
    -d redis 表示后台启动redis
    redis-server /etc/redis/redis.conf  以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis.conf
    --requirepass "123456"  设置引号里字符为密码
    –restart=always : 随docker启动而启动
    appendonly yes 开启redis 持久化

使用redis镜像执行redis-cli命令连接到刚启动的容器

redis@redis:~/redis$ docker exec -it 549725ce9e82(容器ID) redis-cli

也可以使用如下软件连接Redis可进行查看(Windows下的软件),
Docker容器的启动_第1张图片

二、Docker安装Nginx

1、Docker上启动nginx

  1. 使用docker 下载nginx 镜像

docker pull nginx

nginx@nginx:~$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
c499e6d256d6: Pull complete 
74cda408e262: Pull complete 
ffadbd415ab7: Pull complete 
Digest: sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
  1. 查看镜像

docker images nginx

nginx@nginx:~$ docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ed21b7a8aee9        10 days ago         127MB
  1. 启动nginx (也可以直接执行下面这个命令来启动,启动时会下载nginx)

docker run --name nginx -p 80:80 -d nginx

这样就简单的把nginx服务启动了
Docker容器的启动_第2张图片

2、配置修改nginx的配置文件

  1. 我们有时需要使用自己的配置,就要改变配置文件nginx.conf ,进入容器,命令

docker exec -it nginx bash

nginx@nginx:~$ docker exec -it nginx bash
root@aafeaf6562e9:/#

nginx.conf配置文件在/etc/nginx/ 下面

root@aafeaf6562e9:/etc/nginx# ls
conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf
  1. 在宿主机中执行以下命令,把nginx.conf配置文件从docker的nginx容器中拷贝到宿主机的目录中

docker cp nginx:/etc/nginx/nginx.conf ./docker-nginx

  1. 在宿主机中docker-nginx目录下新建conf.d文件夹

mkdir conf.d

  1. 在宿主把/etc/nginx/conf.d文件夹下的default.conf拷贝到宿主机的conf.d文件夹下

docker cp nginx:/etc/nginx/conf.d/default.conf ./docker-nginx/conf.d

注意: 在系统上直接安装nginx时只有nginx.conf一个文件。但使用docker安装的nginx是把nginx.conf配置文件拆成了nginx.conf和conf.d文件夹下的default.conf两个文件

  1. 根据自己的需求修改好配置文件后,下一步是启动nginx
    nginx.conf一般是固定不变的。在conf.d文件夹下的default.conf文件中我添加如下:
    Docker容器的启动_第3张图片

启动命令:

配置好文件后,执行以下命令启动nginx容器(以下命令是一条命令: ,由于篇幅问题自动换行):

docker run --name nginx -p 80:80 -v /home/nginx/docker-nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/docker-nginx/log:/var/log/nginx -v /home/nginx/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /home/nginx/nginx-file:/home/nginx/nginx-file --restart always -d nginx

以上命令具体如下:(这里未加-i-t

docker run
--name nginx
-p 80:80
-v /home/nginx/docker-nginx/nginx.conf:/etc/nginx/nginx.conf
-v /home/nginx/docker-nginx/log:/var/log/nginx
-v /home/nginx/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
-v /home/nginx/nginx-file:/home/nginx/nginx-file
--restart always
-d nginx

docker run :创建容器的命令
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
-v:表示目录映射关系(前者是宿主机目录,后者是dockker的nginx容器内的目录,表示把容器内的目录与宿主机上的目录映射起来),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

–name mynginx 表示给这个容器起了一个 mynginx 的名字。

前几个“-v”,是配置文件的映射,前边代表宿主机,后面代表容器,解释为宿主机的 nginx 配置文件,映射到容器内的 nginx 子目录下的配置文件上。

最后一个 “-v” ,是宿主机上目录的映射,映射到容器内的同名的目录下面,同样的前边代表宿主机,后面代表容器,这样实现的好处就是不用每次都要登入容器内进行文件的操作,直接在宿主机 上/home/nginx/nginx-file 目录操作即等同于操作容器

在浏览上进行测试查看:http://192.168.3.188:9999/1.jpg
配置的根目录是 /home/nginx/nginx-file ,1.jpg放到了该目录下
Docker容器的启动_第4张图片

重要!!!

若直接用root用户,则不会出现这个问题

因为操作时用的不是root用户,故在访问之前会出现403 ,原因是没有权限,解决办法:给配置的目录增加权限chmod -R 777 ./nginx-file/ 若直接用root用户,则不会出现这个问题
Docker容器的启动_第5张图片

完整的nginx.conf的配置文件详解如下:

    #开启进程数 <=CPU数  
    worker_processes 1;  
      
    #错误日志保存位置  
    #error_log logs/error.log;  
    #error_log logs/error.log notice;  
    #error_log logs/error.log info;  
      
    #进程号保存文件  
    #pid logs/nginx.pid;  
      
    #等待事件  
    events {  
    #每个进程最大连接数(最大连接=连接数x进程数)   
    worker_connections 1024;  
    }  
      
      
    http {  
    #文件扩展名与文件类型映射表  
    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压缩  
    #gzip on;  
      
    #设定请求缓冲  
    client_header_buffer_size 1k;  
    large_client_header_buffers 4 4k;  
      
    #设定负载均衡的服务器列表  
    upstream myproject {   
    #weigth参数表示权值,权值越高被分配到的几率越大  
    #max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查  
    #fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器  
    #这里指定多个源服务器,ip:端口,80端口的话可写可不写   
    server 192.168.1.78:8080 weight=5 max_fails=2 fail_timeout=600s;  
    #server 192.168.1.222:8080 weight=3 max_fails=2 fail_timeout=600s;   
    }  
      
    #第一个虚拟主机  
    server {  
    #监听IP端口  
    listen 80;  
      
    #主机名  
    server_name localhost;  
      
    #设置字符集  
    #charset koi8-r;  
      
    #本虚拟server的访问日志 相当于局部变量  
    #access_log logs/host.access.log main;   
      
    #对本server"/"启用负载均衡  
    location / {   
    #root /root; #定义服务器的默认网站根目录位置  
    #index index.php index.html index.htm; #定义首页索引文件的名称  
    proxy_pass http://myproject; #请求转向myproject定义的服务器列表  
      
    #以下是一些反向代理的配置可删除.  
    # proxy_redirect off;   
    # proxy_set_header Host $host;   
    # proxy_set_header X-Real-IP $remote_addr;   
    # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
    # client_max_body_size 10m; #允许客户端请求的最大单文件字节数   
    # client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,   
    # proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)   
    # proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)   
    # proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)   
    # proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小   
    # proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置   
    # proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)   
    # proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传  
    }   
    location /upload {   
    alias e:/upload;   
    }  
    #设定查看Nginx状态的地址   
    location /NginxStatus {   
    stub_status on;   
    access_log off;   
    #allow 192.168.0.3;  
    #deny all;  
    #auth_basic "NginxStatus";   
    #auth_basic_user_file conf/htpasswd;   
    }  
      
    #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 / {  
    #WEB文件路径  
    # root html;  
    #默认首页  
    # index index.html index.htm;  
    # }  
    #}  
      
      
    # HTTPS server HTTPS SSL加密服务器  
    #  
    #server {  
    # listen 443;  
    # server_name localhost;  
      
    # ssl on;  
    # ssl_certificate cert.pem;  
    # ssl_certificate_key cert.key;  
      
    # ssl_session_timeout 5m;  
      
    # ssl_protocols SSLv2 SSLv3 TLSv1;  
    # ssl_ciphers HIGH:!aNULL:!MD5;  
    # ssl_prefer_server_ciphers on;  
      
    # location / {  
    # root html;  
    # index index.html index.htm;  
    # }  
    #}   
    }  

你可能感兴趣的:(docker,nginx,1024程序员节)