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

发布于:2023-01-01 ⋅ 阅读:(169) ⋅ 点赞:(0)

一、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

添加软件源信息:

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

更新 yum 缓存:

sudo yum makecache fast

安装 Docker-ce:

sudo yum -y install docker-ce

启动 Docker 后台服务

sudo systemctl start docker

设置docker自动重启

systemctl enable docker

测试运行 hello-world

docker run hello-world

查看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

docker run 创建并运行容器

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

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

#进入容器

docker exec -it nginx bash 

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

查看网络列表

docker network ls

在这里插入图片描述

2、docker安装mysql

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

docker pull mysql:8.0.29

运行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

设置为开机启动

docker container update --restart=always mysql

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

3、docker安装php

拉取php镜像

docker pull php:8.1.7-fpm

新建 /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

设置php开机启动

docker container update --restart=always php8

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

4、docker安装 Nginx

拉取官方的镜像

docker pull nginx:1.22.0

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

docker images nginx

创建挂载目录

mkdir -p /www/docker/nginx/conf
mkdir -p /www/docker/nginx/log
mkdir -p /www/docker/nginx/html

使用 nginx 镜像

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

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

docker ps -a

生成容器

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

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

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

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

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

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

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

查看容器启动情况

docker ps 
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

设置开机启动
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;
        }
    }

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

nginx -s reload

本地hosts配置

vim /etc/hosts
127.0.0.1   www.gsj.com

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


网站公告

今日签到

点亮在社区的每一天
去签到