使用 Docker 安装 LInux 容器

创建初始 lInux 容器

docker run --restart=always --name linux \
-p 80:80 -p 12922:22 \
-v /Users/wml/alidata:/Users/wml/alidata \
-v /Users/wml/alidata/data/docker/linux/alidata:/alidata \
-h docker-lnmp \
-dit  ubuntu:latest

安装配置基础服务

1、安装 ssh 服务

apt update && apt install -y openssh-server

2、新增部署用户

useradd -m wml

passwd wml

3、新用户授予root权限


apt-get install -y sudo

apt install -y vim

sudo visudo

# 在文件最后新增这一行
wml ALL=(ALL) ALL

4、创建秘钥

su wml

ssh-keygen -t rsa

5、配置 ssh 公钥登录

vim ~/.ssh/authorized_keys

# 将 .ssh 文件夹 内容复制到宿主机

docker cp  linux:/home/wml/.ssh /Users/wml/alidata/data/docker/linux/home/wml/ssh

6、安装 logrotate、supervisor 服务

logrotate 默认应该已安装

sudo apt-get install -y supervisor

# 将容器整个 etc 目录内容复制到宿主机

docker cp  linux:/etc /Users/wml/alidata/data/docker/linux/etc

安装 Nginx、php 开发环境

1、利用 lnmp 安装 php、nginx 服务

2、复制以上服务的配置文件到宿主机

docker cp  linux:/usr/local/php/etc /Users/wml/alidata/data/docker/linux/usr/local/php/etc

docker cp  linux:/usr/local/nginx/conf /Users/wml/alidata/data/docker/linux/usr/local/nginx/conf

3、利用初始 linux 容器创建自定义镜像

docker commit linux linux:105

4、利用上述自定义镜像挂载宿主机以上服务配置文件所在目录创建新的镜像

注意需要开机重启的服务都配置到 supervisord 中

docker run --privileged --restart=always --name linux \
-p 443:443 -p 80:80 -p 12922:22 -p 8000:8000 -p 8001:8001 -p 8002:8002 -p 8003:8003 \
-v /Users/wml/alidata:/Users/wml/alidata \
-v /Users/wml/alidata/data/docker/linux/alidata:/alidata \
-v /Users/wml/alidata/data/docker/linux/home/wml/ssh:/home/wml/.ssh \
-v /Users/wml/alidata/data/docker/linux/usr/local/php/etc:/usr/local/php/etc \
-v /Users/wml/alidata/data/docker/linux/usr/local/nginx/conf:/usr/local/nginx/conf  \
-h docker-lnmp --user root --network lnmp002 --ip=172.25.0.3 \
-dit  linux:115 \
/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf

进入容器, 启动必要服务

# 进入容器
docker attach linux

# 启动 supervisor 服务

sudo supervisord -c /etc/supervisor/supervisord.conf 

Linux 容器备份

创建 Linux 容器后若进行了修改我们想备份该容器可以使用如下方法

第一步 将 linux 容器导出为镜像

docker commit 命令可以将一个容器的当前状态提交为一个新的镜像。基本语法如下:

docker commit [OPTIONS] {容器的 ID 或名称} {新镜像的仓库名称:标签}

例如,假设你有一个运行中的容器 my_container,你想将它制作成一个名为 my_image 的新镜像,你可以执行:

docker commit linux linux:114

第二步 将导出的镜像保存为归档文件

使用 docker save 命令可以将镜像保存为归档文件。

# gzip 表示导出时对归档文件进行压缩

$ docker save {镜像名} | gzip > {归档文件名}.tar.gz

# 备份 linux 镜像

docker save linux:114 | gzip > linux114.tar.gz

然后我们将 {归档文件名}.tar.gz 文件复制到要存储的位置