1. 安装Docker
1.1. 一键安装Docker
Manjaro系统下pacman命令一键安装Docker
1.2. 配置镜像加速器
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
1.2.1. 新建 /etc/docker/daemon.json 文件
1 2
| sudo touch /etc/docker/daemon.json sudo vim /etc/docker/daemon.json
|
1.2.2. 在文件中添加如下命令
文件位置:/etc/docker/daemon.json1 2 3 4 5
| { "registry-mirrors": [ "https://registry.docker-cn.com" ] }
|
1.2.3. 重新启动服务
1 2
| sudo systemctl daemon-reload sudo systemctl restart docker
|
1.2.4. 检查加速器是否生效
若最后有如下信息,则国内镜像服务(加速器)已生效
1 2
| Registry Mirrors: https://registry.docker-cn.com/
|
2. Docker简单应用
2.1. 运行hello-word小例子
1
| sudo docker run hello-world
|
运行hello-world容器,尽管此时没有hello-world镜像,docker会自动拉取hello-world的镜像,然后运行hello-world容器。
2.2. 获取镜像
在 Docker Store 上有非常多的高质量的官方镜像
2.2.1. 拉取Python镜像
1
| sudo docker pull python:3.5
|
2.2.2. 拉取Ubuntu16.04镜像
1
| sudo docker pull ubuntu:16.04
|
2.2.3. 列出已经下载下来的镜像
2.2.4. 删除镜像
1
| sudo docker image rm [镜像名/镜像ID]
|
3. 使用python镜像
3.1. 准备工作
在宿主操作系统~目录下新建文件夹
1 2
| mkdir -p DockerTest/Pythonapp touch helloworld.py
|
helloworld.py 文件,代码如下:
文件位置:~/DockerTest/Pythonapp/helloworld.py1 2 3 4 5
| #!/usr/bin/python
for i in range(5): print(i, ' hello world!')
|
3.2. 运行容器
跳转到上一目录~/DockerTest,并执行以下命令运行容器
1 2 3 4 5 6 7
| sudo docker run -v $PWD/Pythonapp:/usr/src/Pythonapp -w /usr/src/Pythonapp python:3.5 python helloworld.py
-v $PWD/Pythonapp:/usr/src/Pythonapp -w /usr/src/Pythonapp python helloworld.py
|
执行结果如下:
1 2 3 4 5
| 0 hello world! 1 hello world! 2 hello world! 3 hello world! 4 hello world!
|
4. 使用Ubuntu16.04镜像
4.1. 容器与宿主机对比
1 2 3 4 5 6 7 8
| sudo docker run -t -i ubuntu:16.04 /bin/bash
pwd
uname -r
ps a | grep docker
|
左图为Docker运行的Ubuntu16.04容器; 右图为宿主操作系统
分析:执行pwd (#显示当前目录)命令时可看到容器的当前目录为/
,而非运行容器的宿主目录~
;均跳转到根目录/
后运行ls
命令可看到容器与宿主操作系统有两套不同的文件系统。正如前面介绍的那样,Docker会虚拟一整套文件系统。
分析:两边执行uname -r
> # 显示正在使用的内核版本命令,两边内核版本一致,正如前面介绍的那样,Docker无模拟硬件,无内核。
4.2. 创建一个Ubuntu16.04容器并在内运行bash小程序
小程序功能:每隔一秒输出一次hello world
1
| sudo docker run ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
|
4.3. 显示当前容器
1 2
| docker container ls sudo docker container ls -a
|
4.4. 清理所有处于终止状态的容器
1
| sudo docker container prune
|
5. Docker镜像、容器常用命令
5.1. 每次启动docker 重新启动服务
1 2
| sudo systemctl daemon-reload sudo systemctl restart docker
|
##(容器对比)linux命令:
显示当前目录: pwd
显示正在使用的内核版本: uname -r
显示Docker的进程: ps a | grep docker
5.2. 从 Docker 镜像仓库获取镜像:
1
| sudo docker pull ubuntu:16.04
|
5.3. 列出本地镜像:
5.4. 删除本地镜像:
1
| sudo docker image rm [选项] <镜像1> [<镜像2> ...]
|
6. 容器 常用命令
6.1. 显示当前容器:
1 2
| sudo docker container ls sudo docker container ls -a
|
6.2. 新建并启动:
1
| sudo docker run -t -i ubuntu:16.04 /bin/bash
|
6.3. 后台运行容器 -d 参数:
1 2 3 4
| sudo docker run -d ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
sudo docker run ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
|
6.4. 终止容器:
1
| sudo docker container stop [容器名/容器ID]
|
例如对于上面中只启动了一个ubuntu:16.04终端的容器,用户通过 exit 命令或Ctrl+d 来退出终端时,所创建的容器立刻终止。
6.5. 删除容器
1 2 3
| sudo docker container rm [容器名/容器ID] sudo docker container rm -f [容器名/容器ID] sudo docker container prune
|
6.6. 进入容器
在使用 -d 参数时,容器启动后会进入后台。
某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐大家使用 docker exec 命令
1 2 3 4 5 6 7
| sudo docker attach [容器名/容器ID] sudo docker exec -it [容器名/容器ID] bash
sudo docker run -d ubuntu:16.04 sudo docker container ls -a sudo docker exec -it [容器名/容器ID] bash
|
6.7. 导出和导入容器
6.7.1. 导出容器
如果要导出本地某个容器,可以使用 docker export 命令,将导出容器快照到本地文件。
1 2
| sudo docker container ls -a sudo docker export [容器名/容器ID] > FileName.tar
|
6.7.2. 导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,例如
1 2
| sudo cat FileName.tar | docker import - test/FileName:v1.0 sudo docker image ls
|