前两天我学习了一下docker的一些基本知识点,这里用的centos7,现在做一个总结。

目录

  • 安装docker
  • 拉取镜像
  • 运行nginx
  • 运行php
  • nginx配置php
  • 运行mysql
  • 配置phpmyadmin

安装docker

  • 下载docker(yum自带版本低)
1
yum install docker
  • 下载docker-ce
1
2
3
4
5
6
cat /etc/redhat-release
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-edge # 可选
yum-config-manager --enable docker-ce-test # 可选
yum install docker-ce
  • 启动运行docker
1
systemctl enable docker && systemctl start docker
  • 配置国内镜像

进入daemon.json写入以下内容。

1
2
# 进入文件
cd /etc/docker/daemon.json

写入以下内容

1
2
3
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
  • 添加当前用户到docker组
1
sudo usermod -aG docker <USER>
  • 重启docker

systemctl restart docker

  • docker常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 镜像操作

# 拉取镜像
docker pull 镜像名称:镜像版本号
# 查看镜像
docker images
# 删除镜像
docker rmi 镜像名称/镜像id

# 容器操作

# 创建容器
docker run --name 容器名称 -p 外部端口号:容器端口号 -e 容器环境参数 -v 映射外部文件到镜像内部 -d 镜像名称
# 查看容器
docker ps
# 查看活动容器
docker ps -a
# 启动容器
docker start 容器名称/容器id
# 停止容器
docker stop 容器名称/容器id
# 重启容器
docker restart 容器名称/容器id
# 删除容器
docker rm 容器名称/容器id

拉取镜像

1
2
3
4
5
6
7
8
9
10
11
12
# nginx
docker pull nginx
# php
docker pull php:7.1-fpm
# mysql
docker pull mysql:8.0.18
# node
docker pull node:10.18.0
# phpmyadmin
docker pull phpmyadmin/phpmyadmin
# centos7
docker pull centos:centos7

运行nginx

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

打开ip:8080就可以访问了。

运行php

docker run --name php-test -v /usr/local/web:/www -d php:7.1-fpm

-v就是本地的文件映射到容器内的文件

nginx配置php

  • 主机新建web用于存放php文件;创建nginx用于存放nginx配置文件。
1
2
3
4
mkdir -p /usr/local/web
mkdir -p /usr/local/src/nginx
cd /usr/local/src/nginx
mkdir conf.d logs html
  • 在web文件夹中写入一个文件
1
vi /usr/local/web/index.php

写入

1
2
3
<?php
echo phpinfo();
?>
  • 写入nginx配置文件
1
2
cd /usr/local/src/nginx/conf.d
vi php-test.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 80;
server_name localhost;

location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
}
  • 运行配置
1
docker run --name php-demo -p 8082:80 -d -v /usr/local/web:/usr/share/nginx/html:ro -v /usr/local/src/nginx/conf.d:/etc/nginx/conf.d:ro --link php-test:php nginx

打开ip:8082就可以访问了。

运行mysql

  • 运行mysql
1
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=MYsqldlmm20001. -d mysql:8.0.18
  • 创建账号和数据库
1
2
3
4
5
6
7
docker exec -it mysql-test /bin/bash
mysql -u root -p
create database test;
CREATE USER 'test'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON test.* TO 'test'@'%';
FLUSH PRIVILEGES;
exit;

配置phpmyadmin

1
docker run -d --name phpMyAdmin -e PMA_HOST=$(ip route show | grep docker0 | awk '{print $9}') -e PMA_PORT=3306 -p 8081:80 phpmyadmin/phpmyadmin

配置centos7

1
docker run --name=centos -itd --privileged -p 20010:22 centos:centos7 /usr/sbin/init

注意:Failed to get D-Bus connection: Operation not permitted,使用不了systemctl,systemd维护系统程序,需要特权就会访问Linux内核;容器不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,所以要给特权以便容器访问系统。