1 内核版本
更新该Liunx系统的内核版本
$ yum updatedate$ yum update$ yum update$ yum update$$ yum update y$ yum updateum updateu$ yum updatem update
#$ reboot #重启
2 安装Docker
安装1
安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
查看仓库中docker版本
yum list docker-ce --showduplicates | sort -r
安装 Docker CE
$ sudo yum makecache fast
$ sudo yum install docker-ce
安装2
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
centos8的yum库中没有符合最新版docker-ce对应版本的containerd.io
containerd.io版本不够的话 yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm
3 启动 Docker CE
$ sudo systemctl enable docker
$ sudo systemctl start docker
4 建立 docker 用户组
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
建立 docker 组:
$ sudo groupadd docker
将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER
退出当前终端并重新登录,进行如下测试。
5 测试 Docker 是否安装正确
$ docker run hello-world
若能正常输出以上信息,则说明安装成功。
6 镜像加速器
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://hub-mirror.c.163.com"
]
}
之后重新启动服务。
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
查找镜像
docker search php
拉取镜像
docker pull php:5.6-fpm
本地镜像列表
docker image ls
docker images
容器
docker run --name php_1 php
docker stop php_1
docker rm php_1
进入容器
docker exec -it php_1 bash
容器互联
创建一个新的 Docker 网络
docker network create -d bridge my-net1 #network .sh
#docker run -it --rm --name php7 --network my-net1 php7 sh
-d 参数指定 Docker 网络类型,有 bridge overlay。其中 overlay 网络类型用于 Swarm mode
启动脚本建立好了以后首先开始mysql的安装,在start_docker_mysql.sh里面写入内容:
sudo docker run --name mysql_3306 -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD=12345678 -v /root/mysql:/var/lib/mysql --network my-net1 mysql
-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
-v /root/docker挂载宿主机的一个目录,可以用-v参数指定。冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。在容器启动后,容器内会自动创建/var/lib/mysql的目录
-e 传入的环境变量参数
-i 以交互模式运行容器,通常与 -t 同时使用
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d 后台运行容器,并返回容器ID
编写启动php脚本。在start_docker_php.sh中写入一下内容:
sudo docker run --name php_1 --network my-net1 -d -v /root/www:/home/www -v /home/www/logs:/home/wwwlogs -v /tmp:/tmp -v /etc/localtime:/etc/localtime --privileged=true php
--privileged container内的root拥有真正的root权限,不建议。
否则,container内的root只是外部的一个普通用户权限。
/etc/localtime让docker容器使用主机系统时间
#docker run -p 80:80 -d --name mynginx -v /root/www:/usr/share/nginx/html nginx
sudo docker run \
--name nginx_1 \
--network my-net1 \
-d -p 80:80 \
-v /root/www:/home/www \
-v /root/nginx/vhosts:/etc/nginx/conf.d \
-v /root/www/logs:/home/wwwlogs \
nginx
添加nginx 配置文件
/root/nginx/vhosts目录nginx.conf
sudo /root/docker/network.sh
sudo /root/docker/start_mysql.sh
sudo /root/docker/start_php.sh
sudo /root/docker/start_nginx.sh
docker search nginx
https://hub.docker.com/_/nginx查看版本
docker pull nginx
docker pull nginx:1.18.0
docker images nginx
docker run --name nginx01 -p 80:80 -v /var/www:/var/www -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -d nginx:1.18.0
#docker restart nginx01 重启
创建并运行容器后,docker内的nginx即启动成功,无需进入docker内部再次启动nginx, 否则会提示80等端口被占用,因为nginx已经启动。
vi /usr/local/nginx/conf/conf.d/nginx.conf
server {
charset utf-8;
client_max_body_size 128M;
listen 80;
listen [::]:80;
server_name www.youtianyuan.top;
root /var/www;
index index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 172.18.0.3:9000; //172.18.0.3 php镜像的ip地址
try_files $uri =404;
}
}
docker search php
docker pull php:7.4-fpm
docker images
docker run -p 9000:9000 --name phpfpm7401 -v /var/www:/var/www -d php:7.4-fpm
查看php镜像的ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' phpfpm7401
docker search mysql
docker pull mysql:8.0.21
docker run -p 3306:3306 --name mysql801 -v /usr/local/mysql:/etc/mysql/sqlinit -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.21
#docker rm mysql801
#docker exec -it -u root mysql801 bash
#cd /etc/mysql/
php安装pdo
docker exec -it -u root phpfpm7401 bash
docker-php-ext-install pdo pdo_mysql
docker restart phpfpm7401
Redis
mkdir -p /docker/redis/{conf,data}
touch /docker/redis/conf/redis.conf
docker run --name redis01 -p 6379:6379 -v /docker/redis/data:/data -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server