Linux搭建Docker环境
- 安装Docker的依赖库
$ yum install -y yum-utils device-mapper-persistent-data lvm2
# 参数说明
# -y 对所有的问题均回答yes
# 也可以使用官方安装脚本自动安装,可跳过2、3步
$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- 添加Docker CE的软件源信息。
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装Docker CE。
# 将服务器上的软件包信息在本地缓存一下,提高搜索速度
$ yum makecache fast
$ yum -y install docker-ce
- 启动Docker服务
$ systemctl start docker
- 配置Docker的自定义镜像仓库地址
# 仅针对阿里云服务器
# 请将下面命令中的镜像仓库地址https://kqh8****.mirror.aliyuncs.com替换为阿里云为您提供的专属镜像加速地址。
# 地址:容器镜像服务 -> 镜像中心 -> 镜像加速器
$ tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://kqh8****.mirror.aliyuncs.com"]
}
EOF
- 重新加载服务配置文件
$ systemctl daemon-reload
- 重启Docker服务
$ systemctl restart docker
docker中安装Nginx并部署静态文件
- 查看Docker镜像仓库中Nginx的可用版本
$ docker search nginx
- 拉取最新版的Nginx镜像
$ docker pull nginx:latest
- 查看本地镜像
$ docker images
- 运行容器
$ docker run --name nginx-test -p 8080:80 -d nginx
# 参数说明
# --name nginx-test -> 容器名称。
# -p 8080:80 -> 端口进行映射,将本地8080端口映射到容器内部的80端口。
# -d nginx -> 设置容器在后台一直运行。
运行完之后可以在浏览器地址栏输入http://<ECS公网地址>:8080访问Nginx服务
-
如果访问不通,需要检查容器是否启动正常,以及服务器是否开放了当前端口
- 查看当前启动的容器
$ docker ps
- 阿里云开放端口
对应菜单:云服务器 ECS -> 网络与安全 -> 安全组
点进安全组,选择手动添加,具体配置如下图
自定义nginx配置
我们往往希望自己定制nginx的配置,这时候需要将nginx的配置挪出来。
$ docker container cp nginx-test:/etc/nginx .
# 上面命令的含义是,把mynginx容器的/etc/nginx拷贝到当前目录。不要漏掉最后那个点。
执行完成后,当前目录应该多出一个nginx子目录。然后,把这个子目录改名为conf。
$ mv nginx conf
然后在conf目录下的配置文件中就可以对nginx进行配置了。同样,对于log日志和静态文件也可以自定义。
在conf同级目录下执行下列命令。
$ mkdir logs www
然后我们将静态文件放入www文件夹中。因为我们改了配置,所以需要重启nginx。
- 重启nginx
# 停止nginx-test
$ docker stop nginx-test
# 启动服务
$ docker run -d \
-p 127.0.0.2:8080:80 \
-rm -v $PWD/conf/nginx.conf:/etc/nginx/conf.d/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
--name my_nginx nginx
# 参数说明
# -- -rm -> 容器停止运行后,自动删除容器文件
# -- -v -> 绑定一个卷
# -- $PWD -> 当前目录
这时候再去访问8080端口,就可以看到放在www文件夹中静态文件输出的内容了。
docker上安装node.js
# 查看Docker镜像仓库中node的可用版本
$ docker search node
# 拉取最新版的Nginx镜像
$ docker pull node:latest
# 运行node容器
$ docker run -itd --name node-test node
# 参数说明
# -- -i -> 以交互模式运行容器,通常与 -t 同时使用
# -- -t -> 为容器重新分配一个伪输入终端,通常与 -i 同时使用
# -- -d -> 后台运行容器,并返回容器ID
# 进入node容器
$ docker exec -it node-test /bin/bash
# 参数说明
# -- -i -> 即使没有附加也保持 STDIN 打开
# -- -t -> 分配一个伪终端
- STDIN ?
STDIN 通常和 STDOUT 、STDERR 一起出现,他们是终端的标准输入(standard input)、标准输出(standard output)和标准错误输出(standard error)。当linux开始执行程序的时候,程序默认会打开这3个文件流,这样就可以对终端进行输入输出操作。
docker安装MySQL
# 查看mysql可用版本
$ docker search mysql
# 拉取官方的最新版本的镜像
$ docker pull mysql:latest
# 查看本地镜像
$ docker images
# 运行容器
$ docker run --name mysqlserver \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d -i -p 3306:3306 mysql:latest
# 参数说明
# -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
# -v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
# -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
# -v $PWD/data:/var/lib/mysql :将主机当前目录下的 data 目录挂载到容器的 /var/lib/mysql 。
# -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
# 进入容器
$ docker exec -it mysqlserver bash
参考
Nginx 容器教程
快速搭建Docker环境
使用docker安装mysql并连接
linux下的stdin,stdout和stderr理解