准备工作
- 国内换为清华源
- 系统使用
Ubuntu 16.04
安装Docker CE
Docker 的早期版本称为
docker-ce
(社区版,免费),旧版为docker
或docker-engine
。如果安装过要先卸载。
国内镜像加速
由于某些不可抗力因素,国内下载速度实在堪忧!
所以,对于使用 systemd
的系统,请在 /etc/docker/daemon.json
中写入如下内容(如果文件不存
在请新建该文件)
1 | { |
注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。
之后重新启动服务。
1 | sudo systemctl daemon-reload |
Docker基础
进入容器之后很可能不能运行 vim
、sudo
、vi
等基本命令,因为为了保证容器里的镜像足够纯净,足够小。
最最基础命令
在执行
docker run
时,同时下载ubuntu
镜像。1
sudo docker run -i -t ubuntu /bin/bash
-i
保证容器中的STDIN标准输入开启-t
分配一个 伪tty终端检查容器进程
1
ps -aux
退出(退回到宿主机)
1
exit
在宿主机查看容器列表:
1
sudo docker ps -a
(在创建时)容器命名
在宿主机:
1
sudo docker run --name test -i -t ubuntu /bin/bash
重启容器
1
sudo docker start ID/NAME
start
也可以为restart
停止容器
1
sudo docker stop ID/NAME
创建容器但不运行
1
sudo docker create --name NAME -i -t ubuntu /bin/bash
attach(to fasten or join one thing to another)
1
sudo docker attach NAME/ID
重启容器后,会运行一个交互式回话shell。退出shell后容器会再次停止运行。
创建守护式容器
1
sudo docker run --name NAME -d ubuntu /bin/sh -c "while true; do echo Hi; sleep 2; done"
参数
-d
后台运行在宿主机查看容器内进程(前提是在运行)
1
sudo docker top NAME
Docker统计CPU、内存等使用信息 (注意是
stats
,不是status)1
sudo docker stats ID/NAME
查看容器详细信息——
inspect
1
sudo docker inspect daemon_dave
在容器内进行交互式命令
1
sudo docker exec -i -t daemon_dave /bin/bash
一旦退出交互式界面,容器就停止运行!!
删除容器
1
sudo docker rm NAME/ID
删除所有容器
目前还不能一次性删除。
1
sudo docker rm `sudo docker ps -a -q`
注意: 使用
1
``
运行
sudo docker ps -a -q
命令-q
获取IDs进入容器换软件源
将默认源换成 中科大源 选择
HTTP IPV4
不知道为什么
HTTPS
用不了,清华源也用不了,只有中科大的才行查看镜像、容器、数据卷所占空间
1
2
3
4
5
6docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 1 116.7MB 116.7MB (99%)
Containers 1 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
Docker镜像仓库
列出Docker镜像
1
sudo docker images
或:
sudo docker image ls
拉取(指定)镜像
1
sudo docker pull ubuntu:16.04提交定制容器、镜像
构建镜像
使用Commit提交容器
1
sudo docker commit 0f886a94ea6f ithou/apache2
使用自己构建的镜像
1
sudo docker run -it ithou/apache2 /bin/bash
使用Dockerfile构建镜像(推荐)
1
2
3mkdir static_web
cd static_web
sudo vim DockerfileDockerfile
内容:1
2
3
4
5FROM ubuntu:14.04 # 镜像(可以指定版本)
MAINTAINER ithou "qq@qq.com" # 邮箱
RUN apt-get update && apt-get -y install nginx
RUN echo 'Hello, I am in your container.'
EXPOSE 80构建
1
sudo docker build -t="ithou/static_web" .
列出Docker镜像
1
sudo docker images ithou/static_web
从新镜像启动一个容器
1
sudo docker run -d -p 80 --name static_web ithou/static_web nginx -g "daemon off;"
Dockerfile指令
CMD
在
Dockerfile
中只能有一条 CMD指令,如果有多条只能运行最后一条。1
CMD ["/bin/bash"]
注意:
如果使用
service start nginx
命令,则希望upstart来以守护进程形式启动 nginx 服务。而CMD service nginx start
会被理解为CMD ["sh", "-c", "service nginx start"]
, 因此主进程实际上是sh
. 当service ...
命令结束后,sh
自然就结束了,sh
作为主进程退出,容器自然就停止了。正确做法是直接执行nginx可执行文件,并且要求以前台形式运行:
1
2CMD ["nginx", "-g", "daemon off;"]
COPY 和 ADD
所有文件复制均使用
COPY
指令,仅在需要 自动解压 的场合使用ADD
……
Docker Compose
官方中文文档:https://docs.docker-cn.com/get-started/part3/ (文档的 yml
文件格式有错)
启动服务
1
docker-compose up
以 守护进程 启动服务:
docker-compose up -d
停止正在运行的服务
1
docker-compose stop