Docker安装请参考:【Linux下安装Docker CE】
正式开始前,我们需要简单了解Docker容器的常用操作命令:
Docker启动容器的方式两种
- 以交互式启动容器:
docker run -it --name 容器名称 镜像 /bin/bash
以这种方式启动Docker容器,会在容器启动后进入容器内,可以对容器进行操作。 - 以守护进程方式启动容器:
docker run -d --name 容器名称 镜像
以这种方式启动Docker容器,在容器启动后不会进入容器内。后续如果需要对容器进行操作,可以执行命令:docker exec -it 容器名称(容器ID) /bin/bash
Docker启动容器的一些启动参数
-
--name 容器名称
:设置容器的名称(对已存在的容器,名称需唯一) -
--restart=always
:设置容器自启动(默认为非自启动,根据需要设置) -
--link <name or id>:alias
:将源容器的网络并入当前容器的网络,Docker会将源容器的host更新到当前容器的/etc/hosts中,以此来获取源容器的信息,并与之建立通信和传递数据。<name or id>是源容器的名称或ID,alias是源容器在link下的别名。 -
-p xx:yy
:端口映射,将宿主机的xx端口,映射到容器内的yy端口 -
-e XXX=yy
:设置容器内的环境变量,将XXX环境变量设置为yy。例如启动MySQL容器时使用-e MYSQL_ROOT_PASSWORD=123
将MySQL的root用户密码初始化为123。 -
-v xxx:yyy:zz
:将容器内的yyy目录挂载到宿主机的xxx目录(Docker不推荐挂载文件),:zz是挂载路径的权限,可以不设置,默认为:rw(读写模式),可以设置为:ro(只读模式)。例如启动Nginx容器时使用-v ~/nginx/www:/usr/share/nginx/html:ro
将容器内的/usr/share/nginx/html目录挂载到宿主机的~/nginx/www目录,即/root/nginx/www目录,并且设置挂载路径权限为只读模式。
Docker容器启动、停止、重启
- Docker容器启动:
docker start 容器名称(容器ID)
- Docker容器停止:
docker stop 容器名称(容器ID)
- Docker容器重启:
docker restart 容器名称(容器ID)
查看Docker容器
- 查看全部容器:
docker ps -a
- 查看正在运行的容器:
docker ps
宿主机与Docker容器的文件传输
docker cp 源路径 目标路径
将源路径的文件或目录复制到目标路径中
删除Docker容器
docker rm 容器名称(容器ID)
在删除容器之前,需要停止容器。
删除Docker镜像
docker rmi 容器名称:标签(容器ID)
一、Docker中安装MySQL
1. 拉取MySQL镜像
以MySQL5.7.25为例
docker pull mysql:5.7.25
以MySQL8.0.33为例
docker pull mysql:8.0.33
2. 此时可以查看已有的镜像
docker images
3. 启动MySQL容器
以MySQL5.7.25为例
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.25
以MySQL8.0.33为例
docker run -d --restart=always --privileged=true --name mysql8 -v /data/mysql/conf:/etc/mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/log:/var/log -v /data/mysql/mysql-files:/var/lib/mysql-files -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.33
- -v /data/mysql/conf:/etc/mysql:将MySQL配置文件挂载到宿主机的/data/mysql/conf目录
- -v /data/mysql/data:/var/lib/mysql:将MySQL数据文件挂载到宿主机的/data/mysql/data目录
- -v /data/mysql/log:/var/log:将MySQL日志文件挂在到宿主机的/data/mysql/log目录
- -v /data/mysql/mysql-files:/var/lib/mysql-files:MySQL8挂载文件时需要挂载此目录
- --privileged=true:解决报错cannot access '/docker-entrypoint-initdb.d/': Operation not permitted的权限问题
- -p 3306:3306:将宿主机的3306端口映射到容器内的3306端口
- --name mysql:设置容器名称为mysql
- -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码为123456
4. 查看容器
docker ps
或docker ps -a
二、Docker中安装Tomcat并部署Web项目
1. 拉取Tomcat镜像,此处以Tomcat8.5.40为例
docker pull tomcat:8.5.40
2. 启动Tomcat容器
docker run -d -p 8080:8080 --name tomcat tomcat:8.5.40
3. 部署Web应用
(1)将war包上传到宿主机中;
(2)通过docker cp命令将宿主机的war包上传到容器中tomcat的webapps目录下;
(3)tomcat会自动热部署,直接访问Web应用的路径即可。
例如:docker cp xxx.war tomcat:/usr/local/tomcat/webapps
将xxx.war包上传到名称为tomcat的容器中的/usr/local/tomcat/webapps路径下。
三、Docker中安装Nginx + PHP
安装PHP
1. 拉取PHP镜像,此处以PHP7.1-fpm为例、
docker pull php:7.1-fpm
2. 启动PHP容器
docker run -d --name php-fpm -v /root/docker/nginx/www:/var/www/html php:7.1-fpm
- -v /root/docker/nginx/www:/var/www/html:将容器内的/var/www/html目录挂载到宿主机的/root/docker/nginx/www目录,挂载路径的权限使用默认的:rx(读写模式)。
3. 创建/root/docker/nginx/conf/conf.d目录
mkdir /root/docker/nginx/conf/conf.d
4. 在/root/docker/nginx/conf/conf.d目录下添加default.conf文件,在该文件中添加以下内容
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
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 /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
}
说明:
- php:9000 表示 php-fpm 服务的访问路径
- /var/www/html 是 php-fpm 中 php 文件的存储路径,经 Docker 目录挂载,变成了宿主机的路径
/root/docker/nginx/www
安装Nginx
1. 拉取Nginx镜像,此处以Nginx1.14.2为例
docker pull nginx:1.14.2
2. 启动Nginx容器
- 如果不需要关联PHP,执行以下命令即可
docker run -d -p 80:80 --name nginx \
-v /root/docker/nginx/www:/usr/share/nginx/html \
-v /root/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx:1.14.2
- 如果需要关联PHP,执行以下命令即可
docker run -d -p 80:80 --name nginx \
-v /root/docker/nginx/www:/usr/share/nginx/html \
-v /root/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
--link php-fpm:php nginx:1.14.2
- --link php-fpm:php 把 php-fpm 的网络并入 nginx,Docker会自动修改 nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。
3. 最后的配置
将nginx.conf配置文件放入/root/docker/nginx/conf
目录下,在/root/docker/nginx/www
目录下放入想要访问的文件即可。例如放入两个文件index.html和index.php,在index.html中输入任意内容,在index.php中输入以下内容:
<?php
echo phpinfo();
?>
最后就可以直接通过相应的路径进行访问。