作者 | 邮箱 | 时间 |
---|---|---|
潘顾昌 | [email protected] | 2020/01/12 |
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
硬盘使用 | MB | GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 完全隔离 | 完全隔离 |
[root@choerodon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liyasthomas/postwoman latest 8fde9049303e 7 days ago 940MB
pigic/hzero-customs 1.1.0 c3a7900b623c 2 weeks ago 872MB
pigic/hzero-customs latest c3a7900b623c 2 weeks ago 872MB
registry.cn-hangzhou.aliyuncs.com/pigic/hzero-customs 1.1.0 09cf05df3868 2 weeks ago 872MB
mysql 5.7 c4f186b9e038 3 weeks ago 435MB
actiontech/dble latest 206551d47f30 3 months ago 615MB
java 8 d23bdf5b1b1b 3 years ago 643MB
[root@choerodon ~]# docker tag liyasthomas/postwoman:latest liyasthomas/postwoman:0.0.1
[root@choerodon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liyasthomas/postwoman 0.0.1 8fde9049303e 7 days ago 940MB
liyasthomas/postwoman latest 8fde9049303e 7 days ago 940MB
pigic/hzero-customs 1.1.0 c3a7900b623c 2 weeks ago 872MB
pigic/hzero-customs latest c3a7900b623c 2 weeks ago 872MB
registry.cn-hangzhou.aliyuncs.com/pigic/hzero-customs 1.1.0 09cf05df3868 2 weeks ago 872MB
mysql 5.7 c4f186b9e038 3 weeks ago 435MB
actiontech/dble latest 206551d47f30 3 months ago 615MB
java 8 d23bdf5b1b1b 3 years ago 643MB
[root@choerodon ~]# docker inspect -f {{.Id}} 08f
08f0a2ec9505edc26766d91af6eb39e35e74d16af28c0b4082f0cf2f232763eb
[root@choerodon ~]# docker inspect -f {{.Created}} 08f
2020-02-22T05:41:41.81565977Z
[root@choerodon ~]# docker inspect 08f
[
{
"Id": "08f0a2ec9505edc26766d91af6eb39e35e74d16af28c0b4082f0cf2f232763eb",
"Created": "2020-02-22T05:41:41.81565977Z",
"Path": "docker-entrypoint.sh",
"Args": [
"npm",
"run",
"start"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 18531,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-02-22T05:41:42.234648311Z",
"FinishedAt": "0001-01-01T00:00:00Z"
}
]
[root@choerodon ~]# docker search mysql --filter=stars=1000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9164 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3263 [OK]
[root@choerodon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liyasthomas/postwoman 0.0.1 8fde9049303e 7 days ago 940MB
liyasthomas/postwoman latest 8fde9049303e 7 days ago 940MB
[root@choerodon ~]# docker rmi liyasthomas/postwoman:0.0.1
Untagged: liyasthomas/postwoman:0.0.1
[root@choerodon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liyasthomas/postwoman latest 8fde9049303e
可以使用docker rmi -f ubuntu 强行删除镜像
[root@choerodon ~]# docker save -o postwomen.war 8fde9049303e
[root@choerodon ~]# ls
anaconda-ks.cfg postwomen.war
[root@choerodon ~]# docker load < postwomen.war
Loaded image ID: sha256:8fde9049303e502a8cf4d3a37110b885f49f14ffdee13512a0cf32fb94478049
或者
#docker load --input postwomen.war
docker tag test:latest user/test:latest
docker push user/test:latest
# docker create -it ubuntu:latest
此时新建的容器处于静止状态,可以使用docker start命令启动它。
docker run -it ubuntu:14.04 /bin/bash
上面的命令启动一个容器,并启动一个bash终端,允许用户交互
其中,-t选型让docker分配一个伪终端并绑定到容器的标准输入上,
-i选型让容器的标准输入保持打开。
用户可以添加-d参数来实现
docker run -d -p 6379:6379 --name redis redis
docker run -d -p 6379:6379 --name redis redis /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker logs reids
docker run -d -P --name mybase registry.cn-hangzhou.aliyuncs.com/choerodon-tools/cibase:0.7.0 /bin/sh -c "while true; do echo hello world; sleep 1; done"
[root@choerodon docker]# docker logs affectionate_pare
> [email protected] start /app
> nuxt start
ℹ Listening on: http://172.17.0.6:3000/
[root@choerodon docker]# docker logs -f -t --tail=3 affectionate_pare
2020-02-22T05:41:43.356458638Z ℹ Listening on: http://172.17.0.6:3000/
-f 查看实时日志
-t 显示时间
–tail=3 只显示最后3条记录
docker ps -a -q
docker ps -a --no-trunc
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
名称 含义
.ID 容器ID
.Image 镜像ID
.Command 执行的命令
.CreatedAt 容器创建时间
.RunningFor 运行时长
.Ports 暴露的端口
.Status 容器状态
.Names 容器名称
.Label 分配给容器的所有标签
.Mounts 容器挂载的卷
.Networks 容器所用的网络名称
[root@choerodon docker]# docker export 699851e1f58c >run.tar
docker import nginx-test.tar nginx:imp
或
cat nginx-test.tar | docker import - nginx:imp
想要了解docker load
与docker import
命令的区别,还必须知道docker save
与docker export
命令:
docker save images_name
:将一个镜像导出为文件,再使用docker load
命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export
命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。docker export container_id
:将一个容器导出为文件,再使用docker import
命令将容器导入成为一个新的镜像,但是相比docker save
命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。docker save是用来将一个或多个image打包保存的工具。
docker save -o images.tar postgres:9.6 mongo:3.4
虽然命令行参数要求指定image,实际上也可以对container进行打包,docker save如果指定的是container,docker save将保存的是容器背后的image。
将打包后的镜像载入进来使用docker load,例如:
docker load -i images.tar
上述命令将会把postgres:9.6
和mongo:3.4
载入进来,如果本地镜像库已经存在这两个镜像,将会被覆盖。
docker save的应用场景是,如果你的应用是使用docker-compose.yml编排的多个镜像组合,但你要部署的客户服务器并不能连外网。这时,你可以使用docker save将用到的镜像打个包,然后拷贝到客户服务器上使用docker load载入。
1,文件大小不同
export 导出的镜像文件体积小于 save 保存的镜像
2,是否可以对镜像重命名
docker import 可以为镜像指定新名称
docker load 不能对载入的镜像重命名
3,是否可以同时将多个镜像打包到一个文件中
docker export 不支持
docker save 支持
4,是否包含镜像历史
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。
5,应用场景不同
docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。
注意:导入的容器需要重新指定工作目录和开放的端口以及启动命令
[root@choerodon data]# docker run -d -p 3000:3000 --name postwomen -w /app liyasthomas/postwoman:latest docker-entrypoint.sh npm run start
e09d73b29098a76aaa0d89d4367e1b020f7083041a57d13b394b53db57ef75a4
答: 启动容器时传入-w <work_dir>参数即可,如:
docker run -it -w <work_dir> <container_image_name> <command>
示例:
docker run -it -w /home/jello centos /bin/bash
$ sudo docker login --username=zhxpgc registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/pigic/hzero-customs:[镜像版本号]
$ sudo docker login --username=zhxpgc registry.cn-hangzhou.aliyuncs.com$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/pigic/hzero-customs:[镜像版本号]$ sudo docker push registry.cn-hangzhou.aliyuncs.com/pigic/hzero-customs:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录,并作为镜像命名空间前缀。
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEregistry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用"docker images"命令找到镜像,将该镜像名称中的域名部分变更为Registry专有网络地址。
$ sudo docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
参考下面链接搭建
https://www.cnblogs.com/panwenbin-logs/p/10218099.html
docker run -d -p --name web -v /webapp traning/webapp
docker run -d -p --name web -v /src/webapp:/opt/webapp training/webapp
# 查看/root/.bash_history
[root@choerodon docker]# docker run --rm -it -v ~/.bash_history:/data/docker/.bash_history ubuntu /bin/bash
root@b5f442dd0f87:/# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@b5f442dd0f87:/# cd /data/docker/
ℹ如果直接挂载一个文件到容器,使用文件编辑工具,包括vi或者sed-in-place的时候,可能会造成文件inode的改变,从Docker 1.1.0起,这会导致报错信息。
[root@choerodon docker]# docker run -it -v /dbdata --name db-data ubuntu
root@53afbf18eede:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
其他容器共同用,通过–volumes-from
db1容器使用,并且创建文件a.txt
[root@choerodon docker]# docker run -it --volumes-from db-data --name db1 ubuntu
root@aba636719295:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@aba636719295:/# cd /dbdata/
root@aba636719295:/dbdata# ls
root@aba636719295:/dbdata# vi aa.txt
bash: vi: command not found
root@aba636719295:/dbdata# echo hello>a.txt
root@aba636719295:/dbdata# ls
a.txt
root@aba636719295:/dbdata# cat a.txt
hello
root@aba636719295:/dbdata# cd ..
root@aba636719295:/# exit
exit
db2容器使用,查看a.txt
[root@choerodon docker]# docker run -it --volumes-from db-data --name db2 ubuntu
root@b083e5f24e5c:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@b083e5f24e5c:/# cd dbdata/
root@b083e5f24e5c:/dbdata# ls
a.txt
root@b083e5f24e5c:/dbdata# cat a.txt
hello
注意:使用–volumes-from参数所挂载的容器自身并不需要保持在运行状态。如果删除了挂载的容器,(包括db-data、db1和db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。
备份
[root@choerodon docker]# docker run --volumes-from db-data -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
tar: Removing leading `/' from member names
/dbdata/
/dbdata/a.txt
恢复
docker run --volumes-from db-data -v $(pwd):/backup ubuntu tar xcf /backup/backup.tar
总的镜像消耗磁盘空间
[root@choerodon docker]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 7 3 3.156GB 1.166GB (36%)
Containers 6 6 36.96kB 0B (0%)
Local Volumes 34 1 452.2MB 410.4MB (90%)
Build Cache 0 0 0B 0B
每个镜像的消耗磁盘空间
[root@choerodon docker]# docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
ubuntu latest 72300a873c2c 2 weeks ago 64.21MB 0B 64.21MB 0
liyasthomas/postwoman latest 8fde9049303e 2 weeks ago 939.9MB 0B 939.9MB 1
pigic/hzero-customs 1.1.0 c3a7900b623c 4 weeks ago 872.5MB 643.2MB 229.3MB 0
registry.cn-hangzhou.aliyuncs.com/pigic/hzero-customs 1.1.0 09cf05df3868 4 weeks ago 872.4MB 643.2MB 229.2MB 0
mysql 5.7 c4f186b9e038 5 weeks ago 434.9MB 0B 434.9MB 4
actiontech/dble latest 206551d47f30 3 months ago 615MB 0B 615MB 1
java 8 d23bdf5b1b1b 3 years ago 643.2MB 643.2MB 0B 0
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
08f0a2ec9505 liyasthomas/postwoman:latest "docker-entrypoint.s…" 0 55B 2 weeks ago Up 2 weeks affectionate_pare
699851e1f58c mysql:5.7 "docker-entrypoint.s…" 0 4B 3 weeks ago Up 3 weeks mysqlpart2
ef7a7997a953 mysql:5.7 "docker-entrypoint.s…" 0 4B 3 weeks ago Up 3 weeks mysqlpart1
33daa35ccbbd actiontech/dble:latest "/opt/dble/bin/docke…" 1 34.9kB 3 weeks ago Up 3 weeks dble-server
0ef06cb1f12a mysql:5.7 "docker-entrypoint.s…" 0 881B 4 weeks ago Up 4 weeks mysqlslave
4c9ba0f2e4fc mysql:5.7 "docker-entrypoint.s…" 0 1.11kB 4 weeks ago Up 4 weeks mysqlmaster
Local Volumes space usage:
VOLUME NAME LINKS SIZE
e1c2d71fb02be72dbf7571da83eb048590c0a6986fc0f7300214e8e5743fa688 0 0B
fdc555d800077194978b255ff49118e9a11ea08ac1fbc5ce85221a72364ecad0 0 0B
8262471423ad3bc9d47ceb974344e6f1128eff5e28d8f03fde55c8c9a2e401c1 0 0B
b504e94e06e98cea5896e3ac5d3f4705e21b0fea23ebe857059e57c8f7c7b0d1 0 0B
3dcab99dff78a36c2a210efb0311887eccc7c71dc7d1d72ab749d86f3fffd64c 0 92B
a62f5431be564477751c00aad87abef649a5136e6e3dbe49feb7e55465fced6b 0 0B
e5505bfcf2dda897827fff105bf7b91a5de7cb8c2278fde8d2cd98813c8c6628 0 0B
2a9612067abd36a7c72a78f9df4aaf4687045d693f61d5827f9c95a410efb501 0 41.03MB
799a8e8bb756085503481d57839e7bbc74a2a17c23bef5e8021937fd8433ff79 0 41.05MB
14d1f23d4d742324e61c9d18279dc1645403672d6bb32737556f3cb645b6aff0 0 92B
0c1459970579ffbef45fa1067944b06eb851061ed0bf3858ba2803e5dcff4c39 0 0B
9de30d68162e244d1c882746adb220843a81d2ea8744f87dab8704438ab12c4d 0 0B
c0b46f251fb577afbb93fec485c05e5c78893108f48faaf26d0d5350428cfdbc 0 41.05MB
3709f7a49751d092a8cc36a4ccc8e09b9da6e7ed0b3e97213293edced6007ad9 0 41.03MB
ba3feebbabdae5245cd6cd81dcc24db6d37547530f3ba331cdb458d9743f1cd5 0 0B
0cc2d131285c1e6c2ea6a739ed52245879e820e140f698c3f640e988819e8dfe 0 0B
86d4a1ba8ad506c9a52ca6b6643cb48016162c429bb4c558b60bfa371c92c9a3 0 41.03MB
e4a4c73bb968b17c78fc51e7ccf470e110c80b8d2c4c99f6a91b040fd760ca09 0 0B
c3dbcf8a2640d5bf819ae34d1a35fa5ef1840203146ee4d674940cf4869b8ac9 0 0B
ccff993e1a65d05f8c3b6a36987bf064a49871f6cafe9669091dcc640a43560f 0 6B
1cbc6c5c5a55e536f307748bd72712f0120042ba2649908afdc37e01675e167b 0 0B
84a2a8b9c1486583f9c02969c695fbe5b9ce1d162549bcf2c44ca8d8a4fb0f81 0 41.05MB
a034ed3e94417858935ac4b3297b015513801398487f6056ba28af9fae98a932 0 41.05MB
7d47a5b1887ade440ed8193abe8730c9a84436cd472c47738c0980ea82631421 0 41.03MB
7e6827a22f37f3fb7cb17300eb447c0479c237440a96487744fde1fee61dd3e7 0 41.03MB
eacc89dc148b55afe9277a37d66fedd73579f5deb7da0e77673a2ecbd82e20f2 0 41.04MB
59074a354ddfe8aa249ee8d8a201bdfdd706a45339db9f69ea7970232356aec8 1 41.76MB
cd71fe3606f346fd8e91d962ff8aea5d0a02c093e6bb5af708215a1c9ed6b300 0 0B
31316df6ebd501c08b65196b91d4d6089d5e8ea934c585c9231ab676b3d1fc17 0 0B
c089bb311ad0e0547e930d0dbd01194285823e05efb99fc790e2b3025dbc70c7 0 0B
583fd90cf62e95a0a3eece6deb22d3bee37be100daabbbc7a3b1820498c205a4 0 0B
1bcb9ff31f91aea611ee3a273c40e2c3332afc667543e202a5f553f80a391279 0 0B
3d05480c368a6633463bd324c8e3c90f6650e3971c47ef6c7d0ca0cfa80ba27a 0 0B
95ff7d6c6df5ad73f9829ee5a00c71c60a3a8ee4085781635ccd5a14531913d0 0 92B
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
查看消耗内存
[root@choerodon docker]# ps -ef|grep 4c9ba0f2e4fc(容器id)
root 30445 7362 0 08:21 pts/1 00:00:00 grep --color=auto 4c9ba0f2e4fc
root 31536 674 0 2月09 ? 00:01:47 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/4c9ba0f2e4fcf8c9781d852dd3b69f607c89a5e75249b86f772cc693bb1dc05a -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc -systemd-cgroup
[root@choerodon docker]# top -p 31536
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 31536 root 20 0 109092 4124 3096 S 0.0 0.0 1:47.37 containerd-shim
**VIRT:virtual memory usage 虚拟内存
**1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
-P(大写的) Docker会随机映射一个49000~49900的端口至容器内部开放的网络端口。
-p(小写的) 则可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器。
[root@choerodon docker]# docker run -d -P training/webapp python app.py
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
Image docker.io/training/webapp:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
c7d2c28a96b9243ed2de80fba2d414e6aa6d7152750abcb75b2c080c84084afd
[root@choerodon docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7d2c28a96b9 training/webapp "python app.py" 11 minutes ago Up 11 minutes 0.0.0.0:32768->5000/tcp flamboyant_proskuriakova
可以通过docker logs 命令查看应用的信息
[root@choerodon docker]# docker logs flamboyant_proskuriakova
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
docker run -d -p 127.0.0.1::5000 traning/webapp python app.py
[root@choerodon docker]# docker run -d -p 127.0.0.1::5000 training/webapp python app.py
03031bd536cd1b5aae4c8dc80f73a9dcadc81bf5e8f3e67a25d04c6931cc00c6
[root@choerodon docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03031bd536cd training/webapp "python app.py" 6 seconds ago Up 5 seconds 127.0.0.1:32768->5000/tcp nifty_bohr
查看容器端口配置
docker port nifty_bohr 5000
[root@choerodon docker]# docker port nifty_bohr 5000
127.0.0.1:32768
查看容器的名字
[root@choerodon ~]# docker inspect -f {{.Name}} 08f0a2ec9505
/affectionate_pare
使用–link实现容器间互联
[root@choerodon ~]# docker run -d --name db training/postgres
[root@choerodon ~]# docker run -d -P --name web --link db:db training/webapp python app.py
f8c4888314899027245ab56e3629e8d4bb6e61e29cc324921bc1ba027700ff2e
[root@choerodon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8c488831489 training/webapp "python app.py" 33 seconds ago Up 32 seconds 0.0.0.0:32770->5000/tcp web
fbdeb9c80b9a training/postgres "su postgres -c '/us…" 10 minutes ago Up 10 minutes 5432/tcp db
Docker在两个互联的容器之间创建了一个安全隧道,而且不用映射它们的端口到宿主主机上。在启动db容器的时候并没有使用-p或者-P标记,从而避免了暴露数据库端口到外部网络上。
Docker通过两种方式为容器公开连接信息:
①环境变量。
②更新/etc/hosts文件
使用env命令可以查看web容器的环境变量
root@748cb6658940:/opt/webapp# env
HOSTNAME=748cb6658940
DB_NAME=/web/db
TERM=xterm
DB_PORT_5432_TCP_ADDR=172.17.0.7
DB_PORT=tcp://172.17.0.7:5432
DB_PORT_5432_TCP=tcp://172.17.0.7:5432
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/opt/webapp
DB_PORT_5432_TCP_PORT=5432
SHLVL=1
HOME=/root
DB_PORT_5432_TCP_PROTO=tcp
LESSOPEN=| /usr/bin/lesspipe %s
DB_ENV_PG_VERSION=9.3
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/env
其中DB_开头的环境变量是提供web容器连接db容器使用,前缀采用大写的连接别名。
除了环境变量,Docker还添加了host信息到父容器的/etc/hosts的文件
root@748cb6658940:/opt/webapp# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.7 db fbdeb9c80b9a
172.17.0.8 748cb6658940
用ping来测试db容器,它会解析成172.17.0.5。
用户可以连接多个子容器到父容器,比如可以链接多个web到db容器上。
指令:
格式: FROM:
第一条命令必须是from命令。并且在同一个Dockerfile中创建多个镜像时,可以使用多个from指令(每个镜像一次)
指定维护者信息
格式为:RUN 或RUN[“executable”,“param1”,“param2”]
前者将在shell终端中运行命令,即/bin/sh -c; 后者则使用exec执行。指定使用其他终端可以通过第二种方法实现,例如RUN["/bin/bash","-c",“echo hello”]
每条run指令将在当前镜像基础上执行指定指令,并提交为新的镜像。当命令较长时可以用\来换行。
容器启动以后,默认的执行的命令。重点就是这个“默认”。意味着,如果docker run没有指定任何的执行命令或者dockerfile里面也没有entrypoint,那么,就会使用cmd指定的默认的执行命令执行。同时也从侧面说明了entrypoint的含义,它才是真正的容器启动以后要执行命令。
参考:https://blog.csdn.net/u010900754/article/details/78526443
支持三种格式:
CMD[“executable”,“param1”,“param2”]使用exec执行,推荐方式。
CMD command param1 param2在/bin/sh中执行,提供给需要交互的应用。
CMD [“param1”,“param2” ] 提供给ENTRYPOINT的默认参数。
FROM centos
CMD ["p in cmd"]
ENTRYPOINT ["echo"]
注意:
1.Dockerfile中只能有一条CMD指令。如果存在多个CMD,那么只有最后一个CMD才会生效。
2.CMD的主要目的是为正在执行的容器提供默认值。这些默认值可以包括可执行文件,也可以省略可执行文件。省略可执行文件时必须指定ENTRYPOINT指令。
3.如果CMD用于为ENTRYPOINT指令提供默认参数,则CMD和ENTRYPOINT指令都应该使用JSON数组格式指定。
4.exec形式会被解析为JSON数组,这意味着必须对单词使用双引号,而不是单引号。
5.与shell形式不同,exec形式不调用命令shell。这意味着正常的shell处理不会生效。例如,CMD [“echo”, " H O M E " ] 不 会 对 HOME"]不会对 HOME"]不会对HOME执行变量替换。如果想要shell处理生效,要么使用shell形式,要么直接执行shell,例如:CMD [ “sh”, “-c”, “echo $HOME” ]。当使用exec形式并直接执行shell时,就像shell形式一样,执行环境变量扩展的是shell,而不是docker。
CMD与ENTRYPOINT指令的比较参考链接:
https://www.cnblogs.com/lienhua34/p/5170335.html
格式为: Expose […]
例如: Expose 22 80 8443
告诉Docker服务器容器暴露的端口号,供互联系统使用。在启动容器时通过-P,Docker会自动分配一个端口转发到指定端口;使用-p,则可以具体指定哪个本地端口映射过来。
格式为 ENV
指定一个环境变量,会被后续RUN治指令使用,并在容器运行时保持。例如:
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz|tar -xJC /user/src/postgress &&…
ENV PATH /user/local/postgres-$PG_MAJOR/bin:$PATH
格式为ADD
将复制指定的src到容器的dest。其中src可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(自动解压为目录)。
格式为COPY
复制本地主机的(为Dockerfile所在目录的相对路径,文件或目录)为容器中的。目标路径不存在时,会自动创建。
当使用本地目录为源目录时,推荐使用COPY
源路径可以有多个
源路径是相对于执行build的相对路径
源路径如果是本地路径,必须是build上下文中的路径
源路径如果是一个目录,则该目录下的所有内容都将被加入到容器,但是该目录本身不会
目标路径必须是绝对路径,或相对于WORKDIR的相对路径
目标路径如果不存在,则会创建相应的完整路径
目标路径如果不是一个文件,则必须使用/结束
路径中可以使用通配符
#把当前config目录下所有文件拷贝到/config/目录下
ADD config/ /config/
1、如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。
如果目标路径不存在,则会自动创建目标路径。
2、如果源路径是个文件,且目标路径是不是以 / 结尾,则docker会把目标路径当作一个文件。
如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;
如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意,这种情况下,最好显示的以 / 结尾,以避免混淆。
3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。
如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。
4、如果源文件是个归档文件(压缩文件),则docker会自动帮解压。
在Docker 1.0发布时候,包括了新指令COPY。不像是ADD,COPY 更加直接了当,只复制文件或者目录到容器里。
COPY不支持URL,也不会特别对待压缩文件。如果build 上下文件中没有指定解压的话,那么就不会自动解压,只会复制压缩文件到容器中。
COPY是ADD的一种简化版本,目的在于满足大多数人“复制文件到容器”的需求。
Docker 团队的建议是在大多数情况下使用COPY。拷贝文件的原则:使用COPY(除非你明确你需要ADD)
参考:https://www.cnblogs.com/zdz8207/p/linux-docker-add-copy.html
配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。
每个dockerfile只能有一个entrypoint,当指定多个entrypoint时,只有最后一个生效。
原因是镜像的entrypoint设置的启动脚本格式是dos,在linux系统上用vi修改成unix格式即可
# vi filename
# :set ff 回车后看到当前文件的fileformat格式
# :set ff=unix 回车后输入:wq保存文件,重新build镜像即可。
创建一个可以从本地主机或其他容器挂载的挂载点。
之前我们说过,容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,后面的章节我们会进一步介绍 Docker 卷的概念。
为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile 中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。
VOLUME /data
这里的 /data 目录就会在运行时自动挂载为匿名卷,任何向 /data 中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化。当然,运行时可以覆盖这个挂载设置。比如:
docker run -d -v mydata:/data xxxx
在这行命令中,就使用了 mydata 这个命名卷挂载到了 /data 这个位置,替代了 Dockerfile 中定义的匿名卷的挂载配置。
使用 dokcer inspect mycontainer 可以查看到具体的挂载情况:
如上图所示,容器中的"/home/xiaoban/logs/eureka-server/log" 被自动匿名挂载到了本地机器上的 /var/lib/docker/volumes/***
指定运行用户
为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
最终路径为/a/b/c
可以通过docker build命令来创建镜像。
要指定镜像的标签信息,可以通过-t选项。
1.下载ubuntu
docker run -it ubuntu:14.04 /bin/bash
2.更新软件源
apt-get update
3.下载安装SSH服务
yum -y install openssh-server
4.要正常启动SSH服务,需要目录/var/run/sshd存在,手动创建它,并启动服务:
mkdir -p /var/run/sshd
5.启动ssh服务
root@7d04af74cda9:/# /usr/sbin/sshd -D &
[1] 607
此时查看容器的22端口(SSH服务默认监听的端口),已经处于监听状态:
root@7d04af74cda9:/# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 607/sshd
tcp6 0 0 :::22 :::* LISTEN 607/sshd
修改SSH服务的安装登录配置,取消pam登录限制:
sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
宿主机创建公钥
ssh-keygen -t rsa
root@7d04af74cda9:/# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDoUcVrXKVF+8cx2p42geBrWd24/9ugYnKXXt/80WqOF0kNt4wttEq5zBfQDw4tdJaZvmEwxPYEmtQAk76KyJtdnemZc9JOSAHrDE1ld399lBgs7cjwOufiNHQnFu0esLdZnzgNV3nEPNje8NnCiqz7DBFw1l1L80bqPAKJb0WLnYuxRKmDtbPXDd4rCXaJm+yqJOqj7Iy4qsEFvvjpldMFcrJzCX6TsSGoljiDK+7P8zOkJN3ZPvoskX3TPsBuEGzw2TPvHr2Nkp+siLJoMM6kOBElVLJiPtlIRZp2Qjml8d8OkYAD5uoU9o3xl4+cicUZ0zt3Sv3wNW9yPIRH9WZ root@7d04af74cda9
放在容器内
root@7d04af74cda9:/# vi /root/.ssh/authorized_keys
root@7d04af74cda9:/# cat /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8jmjfjcX5lcIEpkoM2Ywd6FeGZDHozt8sSwb8slGA0mbxuQoIwHOCgg9JG0Eyg47A1VCFO3Xh4nqWDk1HyGbztY4gEoMBVpuVvK8/QMixiaNslnB2GPPA/EQc2JMqvnHc+E+9QNou4dBsXFhXd6q3XJ7CHiAvrWspKV0Pj42mW9Gejd9BwwTndCkRy6F8gqLmG8ug1T2M2P8KcypubKipBKdceqQwEyzh6jF2sqm0+DXPKOrMWtZ2qepl/AYDjhM7XtRBAwm7Ic3rgoMP3AnNQ7eLuhuew30NMK/lO0BuUdVX0ZcdxHs6kfEexHzOYaO94gulr9cQ9re982K+cyAv [email protected]
根目录新建run.sh,内容
#!/bin/bash
/usr/sbin/sshd -D
chmod 777 run.sh
保存镜像(7d04af74cda9为容器名)
$ docker commit 7d04af74cda9 sshd:ubuntu
使用镜像
[root@choerodon ~]# docker run -p 10022:22 -d sshd:ubuntu /run.sh
b4a06adb0b7f214bc456324108bc403ff7c2405812034c4c4bda3e85f98ee262
[root@choerodon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b4a06adb0b7f sshd:ubuntu "/run.sh" 23 seconds ago Up 22 seconds 0.0.0.0:10022->22/tcp upbeat_taussig
访问SSH服务
[root@choerodon ~]# ssh 172.28.8.103 -p 10022
The authenticity of host '[172.28.8.103]:10022 ([172.28.8.103]:10022)' can't be established.
ECDSA key fingerprint is SHA256:afOvq+zCGaYPTMk7B7+0CHk8oritj/S4knsJ4i3oKMI.
ECDSA key fingerprint is MD5:62:56:dd:af:5c:b4:81:5f:e4:b4:52:2e:a0:65:d3:a7.
Are you sure you want to continue connecting (yes/no)? yes
下载宿主机私钥到本地
配置私钥路径
成功登录上容器
创建目录
/data/docker/sshd_ubuntu
编写相关文件
cat ~/.ssh/id_rsa.pub >authorized_keys
run.sh
#!/bin/bash
/usr/sbin/sshd -D
Dockerfile
FROM ubuntu:14.04
MAINTAINER from www.pigic.com by pigic
RUN echo "开始搭建.."
RUN apt-get update
# 安装ssh服务
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
RUN mkdir -p /root/.ssh
# 取消pam限制
RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
# 复制配置文件到相应位置,并赋予脚本可执行权限
ADD authorized_keys /root/.ssh/authorized_keys
ADD run.sh /run.sh
RUN chmod 777 /run.sh
# 开放端口
EXPOSE 22
RUN echo "搭建完成.."
# 设置自启动命令
ENTRYPOINT ["/run.sh"]
创建镜像
docker build -t sshd:dockerfile .
查看镜像
[root@choerodon sshd_ubuntu]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sshd dockerfile 64b0599457c6 23 seconds ago 249MB
sshd ubuntu 6b8bd28e7fe2 36 hours ago 249MB
ubuntu latest 72300a873c2c 4 weeks ago 64.2MB
liyasthomas/postwoman latest 8fde9049303e 4 weeks ago 940MB
pigic/hzero-customs 1.1.0 c3a7900b623c 6 weeks ago 872MB
pigic/hzero-customs latest c3a7900b623c 6 weeks ago 872MB
registry.cn-hangzhou.aliyuncs.com/pigic/hzero-customs 1.1.0 09cf05df3868 6 weeks ago 872MB
mysql 5.7 c4f186b9e038 7 weeks ago 435MB
ubuntu 14.04 6e4f1fe62ff1 3 months ago 197MB
actiontech/dble latest 206551d47f30 3 months ago 615MB
java 8 d23bdf5b1b1b 3 years ago 643MB
[root@choerodon sshd_ubuntu]# docker run -d -P sshd:dockerfile
78e2e1aadac3c2aca1d26c773db76182d7c6cf6231e9f751d956c59941891602
[root@choerodon sshd_ubuntu]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78e2e1aadac3 sshd:dockerfile "/run.sh" 4 seconds ago Up 3 seconds 0.0.0.0:32773->22/tcp silly_hawking
注意:
Dockerfile创建的镜像拥有继承性
Dockerfile 从From继承的对象,会把父的端口也暴露出来。
https://www.cnblogs.com/caidingyu/p/10642158.html
docker run -it --name centos7ssh centos:7.4.1708 /bin/bash
yum -y install passwd openssl openssh-server openssh-clients
# 创建 /var/run/sshd/目录,要不然sshd服务启动会报错
mkdir /var/run/sshd/
# 编辑sshd的配置文件/etc/ssh/sshd_config,将其中的UsePAM yes改为UsePAM no
sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
# 7.创建公私密钥,输入命令后,直接按两次enter键确认就行了
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
#8.完成上述几步后,可以开启ssh服务了(&表示后台启动)
/usr/sbin/sshd -D &
# 9.此时使用命令ps -ef | grep sshd 便可以看到效果
#10.查询22端口是否处于监听状态
yum -y install lsof
lsof -i:22
# 11.修改root密码
passwd
#12.测试
#输入命令ssh localhost,然后输入之前设置的root密码
#13.如何配置外部客户端访问docker里的centos7.4容器
docker ps -a
#提交容器成为新的镜像,例如叫做sshd_centos7.4,输入
docker commit 容器ID sshd_dble
#启动这个镜像的容器,并映射本地的一个闲置的端口(例如15000)到容器的22端口,并启动容器的sshd(只要端口不冲突可以同时启动多个容器,如下图)
docker run -d -p 15000:22 sshd_dble /usr/sbin/sshd -D
#现在打开新的终端,输入ssh root@宿主机IP地址 -p 15000,如果能连接成功,会要求输入密码的,输入刚才passwd命令设置的root账户密码就可以进入容器的终端了
#如果连接失败,请检查防火墙是否未开放该端口。
FROM sshd:dockerfile
MAINTAINER pigic from hand-china.com([email protected])
RUN apt update
RUN apt install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
VOLUME ["/data","/etc/nginx/site-enabled","/var/log/nginx"]
WORKDIR /etc/nginx
ADD run.sh /run.sh
RUN chmod 777 /*.sh
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["/run.sh"]
定义run.sh
#!/bin/bash
/usr/sbin/sshd &
/usr/sbin/nginx
创建镜像
docker build -t nginx:stable .
[root@choerodon nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
36f715db3e09 nginx:stable "/run.sh" 5 seconds ago Up 4 seconds 0.0.0.0:32776->22/tcp, 0.0.0.0:32775->80/tcp, 0.0.0.0:32774->443/tcp strange_feistel
nginx内核优化参数(vim /etc/sysctl.conf,写入以下代码, 执行sysctl -p生效)
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter =1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000 #timewait的数量
net.ipv4.tcp_sack = 1 #有选择的应答
net.ipv4.tcp_window_scaling = 1 #设置tcp/ip会话滑动窗口是否可变,1可变,0不可变。开启使滑动窗口大小增加数个数量级,提高数据传输能力
net.ipv4.tcp_rmem = 4096 87380 4194304 #tcp接收缓冲区
net.ipv4.tcp_wmem = 4096 16384 4194304 #tcp发送缓冲区
net.core.wmem_default = 8388608 #发送套接字缓冲区大小的缺省值(字节单位)
net.core.rmem_default = 8388608 #接收套接字缓冲区大小的缺省值
net.core.rmem_max = 16777216 #接收套接字缓冲区大小的最大值
net.core.wmem_max = 16777216 #发送套接字缓冲区大小的最大值
net.core.netdev_max_backlog = 262144 #允许送到队列的数据包最大数目
net.core.somaxconn = 262144 #web应用中listen函数的backlog(积压)
net.ipv4.tcp_max_orphans = 3276800 #最多有多少个TCP套接字不被关联到任何一个用户的句柄上
net.ipv4.tcp_max_syn_backlog = 262144 #记录那些尚未收到客户端确认信息的连接请求最大值,表示SYN队列的长度,可以容纳更多等待连接的网络连接数
net.ipv4.tcp_timestamps = 0 #时间戳关闭
net.ipv4.tcp_synack_retries = 1 #这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_syn_retries = 1 #内核放弃连接之前发送SYN包的数量
net.ipv4.tcp_tw_recycle = 1 #timewait快速回收
net.ipv4.tcp_tw_reuse = 1 #timewait 用于新的连接
net.ipv4.tcp_mem = 1835008 2752512 3670016 #out of socket memory
net.ipv4.tcp_fin_timeout = 15 #保持在FIN-WAIT-2状态的时间,对端出错永不关闭甚至当机缺省值是60s
net.ipv4.tcp_keepalive_time = 30 #keepalived 发送消息的频度
net.ipv4.ip_local_port_range = 1024 65000 #端口范围
# 设置继承自创建的 sshd 镜像
FROM sshd:dockerfile
# 作者信息
MAINTAINER waitfish from dockerpool.com([email protected])
# Let the conatiner know that there is no tty
# 安装编译环境
RUN apt-get update
RUN apt-get install -y build-essential debhelper make autoconf automake patch
RUN apt-get install -y dpkg-dev fakeroot pbuilder gnupg dh-make libssl-dev libpcre3-dev git-core
RUN echo "Asia/Shangshi" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata
# 创建 Nginx 用户
RUN adduser --disabled-login --gecos 'Tengine' nginx
# tengine 安装的 shell 脚本
WORKDIR /home/nginx
RUN su nginx -c 'git clone https://github.com/alibaba/tengine.git'
WORKDIR /home/nginx/tengine
RUN su nginx -c 'mv packages/debian .'
ENV DEB_BUILD_OPTIONS nocheck
RUN su nginx -c 'dpkg-buildpackage -rfakeroot -uc -b'
WORKDIR /home/nginx
RUN dpkg -i tengine_2*_amd64.deb
# 定义挂载的目录
VOLUME ["/data", "/etc/nginx/sites-enabled", "/var/log/nginx"]
# 让 Nginx 运行在排 Daemon 模式
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# 定义工作目录
WORKDIR /etc/nginx
# 添加我们的脚本,并设置权限,这会覆盖之前放在这个位置的脚本
ADD run.sh /run.sh
RUN chmod 755 /*.sh
# 定义输出命令
CMD ["/run.sh"]
# 定义输出端口
EXPOSE 80
EXPOSE 443
定义sh文件
#!/bin/bash
/usr/sbin/sshd &
/usr/sbin/nginx
编译镜像
docker build -t nginx:tengine .
# 设置继承自创建的 sshd 镜像
FROM sshd:dockerfile
# 作者信息
MAINTAINER waitfish from dockerpool.com([email protected])
RUN groupadd -r nginx
RUN useradd -r -g nginx -M nginx
ADD tengine-2.3.2.tar.gz /tengine/