• 猿创征文|手把手玩转docker,从入门到精通


    一、docker介绍

    1、docker简介

    Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 容器解决方案。

    Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

    在这里插入图片描述

    2、docker 的主要用途

    目前有三大类

    1. 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
    2. 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
    3. 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

    3、docker、docker-compose、docker swarm和k8s的区别

    1. Docker

    Docker 是一个容器引擎,容器是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我们使用其他容器技术的核心。

    2. Docker-Compose

    Docker-Compose 是用来管理你的容器的,有点像一个容器的管家,想象一下当你的Docker中有成百上千的容器需要启动,如果一个一个的启动那得多费时间。有了Docker-Compose你只需要编写一个文件,在这个文件里面声明好要启动的容器,配置一些参数,执行一下这个文件,Docker就会按照你声明的配置去把所有的容器启动起来,只需docker-compose up即可启动所有的容器,但是Docker-Compose只能管理当前主机上的Docker,也就是说不能去启动其他主机上的Docker容器

    3. Docker Swarm

    Docker Swarm 是一款用来管理多主机上的Docker容器的工具,可以负责帮你启动容器,监控容器状态,如果容器的状态不正常它会帮你重新帮你启动一个新的容器,来提供服务,同时也提供服务之间的负载均衡,而这些东西Docker-Compose 是做不到的

    4. Kubernetes

    Kubernetes它本身的角色定位是和Docker Swarm 是一样的,也就是说他们负责的工作在容器领域来说是相同的部分,都是一个跨主机的容器管理平台,当然也有自己一些不一样的特点,k8s是谷歌公司根据自身的多年的运维经验研发的一款容器管理平台。而Docker Swarm则是由Docker 公司研发的。

    二、docker使用

    1、linux安装docker

    docker 分为两个分支版本: Docker CE 和 Docker EE。
    Docker CE 即社区免费版
    Docker EE 即企业版,强调安全,但需付费使用。

    安装一些必要的系统工具:

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    • 1

    添加软件源信息:

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 1

    更新 yum 缓存:

    sudo yum makecache fast
    
    • 1

    安装 Docker-ce:

    sudo yum -y install docker-ce
    
    • 1

    启动 Docker 后台服务

    sudo systemctl start docker
    
    • 1

    设置docker自动重启

    systemctl enable docker
    
    • 1

    测试运行 hello-world

    docker run hello-world
    
    • 1

    查看docker版本
    在这里插入图片描述

    2、镜像使用

    docker version 显示docker版本
    docker info 显示 Docker 系统信息,包括镜像和容器数
    docker pull 拉取镜像
    docker images 列出本地的镜像
    docker rmi nginx 删除镜像
    docker search httpd 查找镜像

    3、容器使用

    docker ps 运行中的容器
    docker ps -a 查看所有容器
    docker ps -a -q 查看所有容器ID

    在这里插入图片描述

    拉取官方的镜像 (拉取最新的nginx)

    docker pull nginx
    
    • 1

    docker run 创建并运行容器

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

    –name 容器名称
    -v 本地目录:容器目录 //目录映射
    -p 本地端口:容器端口 //端口映射
    -d 增加一个驻留在进程中长期运行的命令,
    -i 打开STDIN,用于控制台交互
    -t该可以支持终端登录,默认为false
    -m 设置容器使用内存最大值

    #进入容器

    docker exec -it nginx bash 
    
    • 1

    docker stop containerId/name 停止容器
    docker start containerId/name 开启容器
    docker kill containerId/name 杀死一个或多个指定容器进程
    docker top containerId/name 查看容器进程

    docker rm nginx 删除容器
    docker stop $(docker ps -a -q) #stop停止所有容器
    docker rm $(docker ps -a -q) #remove删除所有容器

    容器设置为开机自启动
    docker update --restart=always 容器
    docker update --restart=always id/name
    docker run -d --restart=on-failure:3 id/name

    restart后面的参数:
    no 默认策略,在容器退出时不重启容器
    on-failure 在容器非正常退出时(退出状态非0),才会重启容器
    on-failure:n 在容器非正常退出时重启容器,最多重启n次
    always 在容器退出时总是重启容器

    4、docker查看错误日志

    docker logs [容器名/容器ID]
    在这里插入图片描述

    三、docker搭建nginx+php+mysql环境

    1、创建网络 (默认为桥接)

    首先要创建桥接网络

    docker network create lnmp
    
    • 1

    查看网络列表

    docker network ls
    
    • 1

    在这里插入图片描述

    2、docker安装mysql

    拉起MySQL镜像
    如果要指定版本,使用下面的命令

    docker pull mysql:8.0.29
    
    • 1

    运行MySQL容器

    docker run  \
    -p 3306:3306 --privileged=true \
    --name mysql \
    -v /www/docker/mysql/conf:/etc/mysql/conf.d \
    -v /www/docker/mysql/logs:/var/log/mysql \
    -v /www/docker/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    --network lnmp --network-alias mysql \
    -dit mysql:8.0.29
    --character-set-server=utf8mb4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    设置为开机启动

    docker container update --restart=always mysql
    
    • 1

    进入容器,登录MySQL
    docker exec -it mysql bash
    mysql -uroot -p

    3、docker安装php

    拉取php镜像

    docker pull php:8.1.7-fpm
    
    • 1

    新建 /www目录作为项目目录,根据自己的需要做映射

    docker run \
    -p 9000:9000 -v /www:/www  \
    --link redis:redis --link mysql:mysql \
    --network lnmp --network-alias php8 \
    --name  php8 --privileged=true \
    -dit php:8.1.7-fpm
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    设置php开机启动

    docker container update --restart=always php8
    
    • 1

    php安装扩展:

    docker exec php8 docker-php-ext-install pcntl 
    docker exec php8 docker-php-ext-install pdo_mysql
    docker exec php8 docker-php-ext-install mysqli
    docker exec php8 docker-php-ext-install iconv 
    docker exec php8 docker-php-ext-install gd
    docker exec php8 docker-php-ext-install mbstring
    docker exec php8 docker-php-ext-install opcache
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4、docker安装 Nginx

    拉取官方的镜像

    docker pull nginx:1.22.0
    
    • 1

    我们就可以在本地镜像列表里查到 REPOSITORY 为 nginx 的镜像。

    docker images nginx
    
    • 1

    创建挂载目录

    mkdir -p /www/docker/nginx/conf
    mkdir -p /www/docker/nginx/log
    mkdir -p /www/docker/nginx/html
    
    • 1
    • 2
    • 3

    使用 nginx 镜像

    注意:docker ps 时,如果nginx不存在,在需要查看log日志
    docker logs 容器id //新建容器的时候会返回容器ID

    拷贝把容器配置文件拷贝到主机的映射目录

    docker ps -a
    
    • 1

    生成容器

    docker run --name nginx -p 9001:80 -d nginx
    
    • 1

    将容器nginx.conf文件复制到宿主机

    docker cp nginx:/etc/nginx/nginx.conf /www/docker/nginx/nginx.conf
    
    • 1

    容器conf.d文件夹下内容复制到宿主机

    docker cp nginx:/etc/nginx/conf.d /www/docker/nginx/conf.d
    
    • 1

    将容器中的html文件夹复制到宿主机

    docker cp nginx:/usr/share/nginx/html /www/docker/nginx/
    
    • 1

    查看容器启动情况

    docker ps 
    
    • 1
    docker run \
    --link php8:php8 --link redis:redis --link mysql:mysql \
    --network lnmp --network-alias nginx \
    -p 80:80 --name nginx --privileged=true \
    -v /www:/www \
    -v /www/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
    -v /www/docker/nginx/conf.d:/etc/nginx/conf.d \
    -v /www/docker/nginx/log:/var/log/nginx \
    -v /www/docker/nginx/html:/usr/share/nginx/html \
    -dit nginx:1.22.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    设置开机启动
    docker container update --restart=always nginx

    nginx配置
    在/www/docker/nginx/conf/conf.d目录中添加www.gsj.com.conf文件

     server {
            listen       80;
            server_name  www.gsj.com;
        	set $web_root /www/php/www.gsj.com;
            location / {
                root   $web_root;
                index  index.php index.html index.htm;
            }
       
            location ~ \.php$ {
                fastcgi_pass   php8:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $web_root$fastcgi_script_name;
                include        fastcgi_params;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    docker exec -it [nginx容器名/id] bash

    nginx -s reload
    
    • 1

    本地hosts配置

    vim /etc/hosts
    127.0.0.1   www.gsj.com
    
    • 1
    • 2

    可以在docker中查看相关容器
    在这里插入图片描述

  • 相关阅读:
    docker常见面试题
    利用pytorch 模型载入部分权重
    如何使用 Checkmk 监控你的 Linux 服务器
    Windows字符和字符串处理
    简谈FPGA设计中系统运行频率计算方法与组合逻辑的层级
    【最新Tomcat】IntelliJ IDEA通用配置Tomcat教程(超详细)
    java基于ssm+vue二手手机销售平台
    使用Git从其他分支merge个别文件
    CodeWhisperer 的使用心得
    Flink CDC 实现Postgres到MySQL流式加工传输案例
  • 原文地址:https://blog.csdn.net/gusijin/article/details/126647554