容器的启动
1.两种启动方式:
// 无交互方式
docker run ubuntu:14.04 /bin/echo "Hell the world!"
// 有交互的方式
docker run -t -i ubuntu:14.04 /bin/echo "Hell the world!"
2.docker run
标准的启动流程:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
- 利用镜像创建并启动一个容器。
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
- 从地址池配置一个 ip 地址给容器。
- 执行用户指定的应用程序。
- 执行完毕后容器被终止。
后台运行
// 输出会定向到宿主机的 STDOUT
docker run ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
// 输出不会定向到宿主机的 STDOUT,可以用 docker logs 查看
docker run -d ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; don
e"
终止容器
docker container stop
// 查看终止的容器状态
docker container ls -a
进入容器
docker attach 243c
docker exec -it 69d1 bash
通过这种方式进入容器,在容器内使用 exit 命令,会使容器退出;而 exec 不会
导入导出容器
1.导出
docker export 7691a814370e > ubuntu.tar
2.导入
cat ubuntu.tar | docker import - test/ubuntu:v1.0
docker import http://example.com/exampleimage.tgz example/imagerepo
删除容器
docker container rm trusting_newton
// 清理所有处于停止状态的容器
docker container prune
访问仓库
拉取镜像
docker search centos
docker search --filter=stars=100 centos
拉取镜像
docker pull centos
推送镜像
docker tag ubuntu:17.10 username/ubuntu:17.10
docker push username/ubuntu:17.10
docker search username
私有仓库
1.安装 docker-registry
:
$ docker run -d -p 5000:5000 --restart=always --name registry registry
$ docker run -d -p 5001-5002:5001-5002 --restart=always --name registry registry
2.启动并指定镜像存放位置:
$ docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
3.标记镜像:
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG] 。
$ docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
4.上传、搜索、下载镜像:
$ docker push 127.0.0.1:5000/ubuntu:latest
$ curl 127.0.0.1:5000/v2/_catalog
{"repositories":["ubuntu"]}
5.如果是推送到内网的其他主机仓库,可能需要解除 HTTPS
限制要求:
/etc/docker/daemon.json
{
"registry-mirror": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
}
$ sudo service docker restart