在docker中构建ubuntu开发环境

环境

  1. 宿主机环境windows,从官网下载docker的windows版本,安装完毕后切换到Linux Containers
  2. 镜像使用ubuntu 16.04

docker三大概念

  1. 容器Container:相当于虚拟机
  2. 镜像Image:相当于虚拟机的iso
  3. 仓库Repository:相当于github,官网仓库是hub.docker.com

构建一个镜像,镜像的脚本默认名字为Dockerfile

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
FROM ubuntu:16.04

ENV LANG=en_US.UTF-8

RUN apt-get update -y

RUN apt-get -y install gcc \
g++ \
gdb \
automake \
autoconf \
libtool \
make \
cmake

RUN apt-get -y install ssh \
ntp \
vim \
wget \
curl \
telnet

RUN apt-get -y install git \
subversion \
doxygen \
lighttpd \
net-tools \
inetutils-ping

RUN apt-get -y install python \
golang

RUN apt-get -y install libbz2-dev \
libdb++-dev \
libssl-dev \
libdb-dev \
libssl-dev \
openssl \
libreadline-dev \
libcurl4-openssl-dev \
libncurses-dev \
autotools-dev \
build-essential \
libicu-dev \
python-dev

RUN mkdir /var/run/sshd

# change sshd listen port
RUN sed -i 's/Port[ ]*22/Port 36000/' /etc/ssh/sshd_config
RUN echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config

# add user
RUN mkdir /home/bingo
RUN useradd -s /bin/bash bingo
RUN echo "bingo:123456" | chpasswd
RUN echo "bingo:123456" | chpasswd
RUN chown -R bingo:bingo /home/bingo

# Container should expose ports.
EXPOSE 36000
CMD ["/usr/sbin/sshd", "-D"]

创建一个空目录,在其下建立一个名叫Dockerfile文件,输入以上内容

制作镜像

1
docker build -t ubuntu:dev.16.04 .

如果制作过程中出错,删除相关的命令,重新输入上面的命令继续制作

制作出来的镜像大小大概在960m左右,用”docker image ls”查看

启动容器

1
docker run -d --name dev-ubuntu -p 36000:36000 ubuntu:dev.16.04

-p 36000:36000 前面的36000为宿主机端口,后面为容器端口

docker启动的时候,需要把本容器也启动起来,带参数”–restart=always”

如果需要挂载本地磁盘,使用参数”-v /opt/projects:/home/bingo/“

docker端口映射等网络相关内容可以参考这篇文章

ssh登录到容器

1
ssh -p 36000 bingo@127.0.0.1

“127.0.0.1” 指宿主机的ip

-p 36000 指向宿主机的port

推到仓库,供以后重复使用

  1. https://hub.docker.com/ 上创建一个账号

  2. 登录仓库

1
docker login

按提示输入账号密码

  1. 编译,指向自己的用户名username
1
docker build -t username/ubuntu:dev.16.04 .
  1. 发布到hub
1
docker image push username/ubuntu:dev.16.04

发布后,就可以在 https://hub.docker.com/ 看到刚发布的镜像文件了

  1. 下次需要的时候,就可以用以下命令拉取
1
docker image pull username/ubuntu:dev.16.04