docker小试

Docker 是一个开源的应用容器引擎,类似于虚拟机,但是docker比虚拟机更轻更简洁,非常适合快速部署跨平台的应用。

使用

在Ubuntu上做了几个小测试,大体上能够了解Docker怎么用了。

  1. 首先安装docker
    在Ubuntu上用 apt install docker.io,在其他系统上软件包名字会有所不同

  2. 构建docker image
    docker采用了类似增量构建的方式,一层一层的在base image上添加功能。base image是各个linux发行版的最小镜像,由docker官方提供。我们在base image的基础上实现自己的功能。
    docker使用Dockerfile构建image

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #选择一个基础镜像,alpine是一个体积非常小的linux系统
    FROM alpine:3.9

    #在构建阶段,在系统里执行命令
    #安装软件,alpine的包管理器为apk
    #RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
    RUN apk update
    RUN apk add python
    RUN apk add wget
    #从其他地方获取文件
    RUN wget --no-check-certificate https://github.com/shadowsocksr-backup/shadowsocksr/archive/3.1.2.tar.gz -O /tmp/3.1.2.tar.gz
    RUN tar -xf /tmp/3.1.2.tar.gz -C /tmp/
    RUN mv /tmp/shadowsocksr-3.1.2/shadowsocks/ /usr/local/

    # 设置环境变量,构建时和运行时都有效
    ENV port 8888
    ENV password 888888888
    ENV method aes-256-cfb
    ENV protocol auth_aes128_md5
    ENV obfs plain
    ENV obfs_param []

    #设置工作路径
    WORKDIR /usr/local/shadowsocks/

    #运行时执行的命令
    CMD python server.py -p $port -k $password -m $method -O $protocol -o $obfs -G $obfs_param

    #构建命令
    #docker build -t ssr/alpine:1.0 .
    #设置该image的tag为ssr/alpine 版本为1.0,版本不同image不同

    #运行
    #docker run --restart=always --env password=qwerasd -p 8888:8888 ssr/alpine:1.0
    #通过--env传递环境变量

本地文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#另一种方式
FROM alpine:3.9

#如果速度慢,替换更新源为阿里云
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update
RUN apk add python
#从本地复制到image内,
#注意copy不会复制最外层目录,只会复制该目录内的内容(文件和文件夹),所有要在destination加一个文件夹
COPY ./shadowsocks/ /usr/local/shadowsocks/
WORKDIR /usr/local/shadowsocks/

#另一种运行方式
ENTRYPOINT ["python", "server.py"]

#运行
#sudo docker run -p 34567:34567 ssr -p 34567 -k 1234567
#使用原生方式设置参数

如果用配置文件的方式设置参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
FROM alpine:3.9

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update
RUN apk add python
#从本地复制到image内,
#注意copy不会复制最外层目录,只会复制该目录内的内容(文件和文件夹),所有要在destination加一个文件夹
COPY ./shadowsocks/ /usr/local/shadowsocks/
COPY ./s.conf /usr/local/shadowsocks/conf/s.conf
WORKDIR /usr/local/shadowsocks/

#另一种运行方式
ENTRYPOINT ["python", "server.py"]

#运行
#sudo docker run -p 34567:34567 -v /data/conf/s.conf:/usr/local/shadowsocks/conf/s.conf ssr -c conf/s.conf
#用-v将外部配置文件挂在到容器里,只能用文件夹挂载,只能是绝对路径
#错错错 -v s.conf:/usr/local/shadowsocks/s.conf ssr -c s.conf 错错错
  1. 部署运行容器
    可以用自己构建的image为模板部署容器
    docker run —restart=always —env password=qwerasd -p 8888:8888 ssr/alpine:1.0
    —restart=always 系统重启后,docker也会自动重启容器。否则不会自动启动
  也可以从docker hub下载别人构建好的image
  docker pull wordpress
  docker run wordpress   可以直接run,如果本地没有对应的image则会从hub下载
  1. 常用命令

    sudo docker images 查看有效的镜像

    sudo docker images -a 查看系统中所有镜像

    sudo docker rmi xxx 删除ID为xxx镜像

    sudo docker rmi ssr/alpine:3.9 使用tag删除镜像

sudo docker ps 查看运行中的容器

sudo docker ps -a 查看所有容器

sudo docker kill xxx 关闭ID为XXX容器

sudo docker rm xxx 删除ID为XXX容器

sudo docker run XXXX 运行容器

替换快速docker源

1
2
3
4
5
6
# 创建或修改 /etc/docker/daemon.json 文件,重启服务
{
"registry-mirrors" : [
"http://hub-mirror.c.163.com"
]
}
虽然很不要脸,但是还请您多多打赏 ^_^