Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
目前有三大类
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 分为两个分支版本: 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版本
docker version 显示docker版本
docker info 显示 Docker 系统信息,包括镜像和容器数
docker pull 拉取镜像
docker images 列出本地的镜像
docker rmi nginx 删除镜像
docker search httpd 查找镜像
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 在容器退出时总是重启容器
docker logs [容器名/容器ID]
首先要创建桥接网络
docker network create lnmp
查看网络列表
docker network ls
拉起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
拉取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
拉取官方的镜像
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中查看相关容器