Docker 提供了容器运行环境,开发者可以利用 Docker 打包应用及依赖包成容器镜像,便于移植开发。Docker 容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。利用 Docker 可以简单方便的实现类似VM的功能,且耗费更少的计算资源。小白B利用 Docker 官网提供的 Linux 镜像执行了 bash 程序,也就相当于运行起了 Linux 操作系统。
启动 Docker,在终端查询 Docker 镜像库资源,以 Ubuntu 镜像为例:
· docker search ubuntu
获取镜像资源:
$ docker pull ubuntu
1. Docker 获取到镜像文件后可以启动容器,将镜像资源装入容器中运行,容器包含正在运行的程序的进程。容器状态分为启动和停止状态。
启动一次性运行的容器:
$ docker run ubuntu /bin/echo ‘Hello world’
参数解释
--run :启动容器命令
ubuntu: 镜像名
/bin/echo ‘Hello world’: 容器中执行的命令
这时候 Docker 会创建一个新容器分配一个文件系统,并在只读的 image 层外面挂载一层可读写的层。
2. 启动交互模式容器
$ docker run -i -t ubuntu /bin/bash
--i :开启一个终端
--t: 以交互模式运行
3. 启动后台运行模式
$ docker run -d -i -t --name chew ubuntu/bin/bash
这时不会进入bash程序,执行成功后会返回容器ID
--name: 指定容器名
4. 新容器由run创建后,如果要进入容器运行程序
$ docker exec –it 容器名或容器ID/bin/bash
5. 停止容器
$docker stop 容器名或容器ID
6. 启动容器
$ docker start容器名或容器ID
7. 当退出 Docker 再重新进入后,原来的容器会保留并处在停止状态,需重新启动后才能进入容器执行程序。
docker commit 发布新容器镜像
8. 如果我们在初始镜像上作了修改并向重新创建一个容器来运行该镜像,那么这时要将其封装成一个新的镜像,首先退出所在容器
$docker exit
$ docker commit 容器名或ID 新镜像名称
完成后我们就有了一个新的镜像,可以通过docker images查看当前的所有镜像。
容器内权限
9. 大约在0.6版时,Dokcer引入了privileged。
使用该参数,容器内的root拥有真正的root权限;
否则容器内的root只是外部的一个普通用户权限。
以privileged方式启动的容器可以执行mount挂载,否则就会报未知错误+_+
root@a853ab6f6bcb:~# mountramdisk.image -o loop ./file_tmp/
mount: ./file_tmp/:mount failed: Unknown error -1
10. 最后较完整的开启容器的命令如下:
$ docker run -it -d --privileged --name 新容器名镜像名/bin/bash