开始Docker使用速成之旅吧

  • Docker 速用教程
  • 多种方法---找到你心仪的镜像并安装它
  • 如何将本地拉取的镜像打包上传到没网的服务器上?
  • 开始容器使用之旅吧
  • 查看已经安装的镜像
  • 找到已经运行的容器
  • 进入已有container容器
  • 容器里和容器外的如何数据互通(数据映射)
  • 删除我们不需要的容器和镜像
  • 保存更新对容器的操作
  • 容器中使用gpu
  • Reference


Docker 速用教程

最近在使用Docker,写个简单易懂的文章,希望能帮到别人,快速上手docker。

多种方法—找到你心仪的镜像并安装它

我总结了三种方法

1.在DockerHub网页里搜索,页面里会有docker的详细介绍,可以直接通过命令进行拉取安装。比如下图,使用右下方里的命令docker pull hello-world,就可以把这个镜像拉下来啦,是不是很简单。

docker推送太慢_docker推送太慢


2.还可以用docker search + dockerName命令,寻找你需要的镜像。如下图所示。

docker推送太慢_docker推送太慢_02

3.使用你找到项目里的dockerfile, 自己去build一个镜像吧。

- 使用当前目录的 Dockerfile 创建镜像,镜像名字为mm/detection:v1,命令如下。
	```bash
	|  docker build -t mm/detection:v1 
	```
- 使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。

	```bash
	|  docker build github.com/file/docker-firefox
	```

 - 也可以通过 -f Dockerfile 文件的位置:
	```bash
	|   docker build -f /path/to/Dockerfile 
	```

如何将本地拉取的镜像打包上传到没网的服务器上?

保存镜像
(如果以上步骤完成完美,可以忽略次条及下一条)
有时候会遇到网不好,或者没网的情况,那么直接用命令拉起镜像变得很难。便可以在别的网好的地方,下好镜像,传到需要的地方。用下面的命令,docker save -o 加上要保存成的镜像名称,后面加上镜像名字,就可以把镜像存下来啦。

| docker save -o ImageFileName.tar ImageName

载入镜像

用docker load 命令将刚刚保存下的镜像,进行导入吧。命令如下:

$ sudo docker load --input ImageFileName.tar

或者可以用到

$ sudo docker load < ImageFileName.tar

开始容器使用之旅吧

查看已经安装的镜像
  1. docker images可以查看我们已经安装的Image镜像
| docker images

使用例子如下:

docker推送太慢_linux_03

在列出信息中,可以看到几个字段信息:

  • 来自于哪个仓库,比如 bitxiong/tsn
  • 镜像的标记,比如 latest
  • 它的 ID 号(唯一)
  • 创建时间
  • 镜像大小
    其中镜像的 ID 唯一标识了镜像

启动Container,开始运行我们的镜像吧

  1. 使用命令docker run 加上镜像名称,可以运行我们的镜像,产生container。命令如下图所示:
docker run -t -i  imageName /bin/bash

使用例子如下:

docker推送太慢_docker推送太慢_04


在这里解释一下’-i’ 和’-t’. ‘-t’是加了tag. 这里加了这两个,可以让我们在terminal里交互式的操作container。可以看到容器里的文件,对其进行操作。

docker推送太慢_docker_05

找到已经运行的容器

使用命令docker ps ,可以看到已经运行的容器,这里CONTAINER ID是唯一的,同一个镜像可以有多个已经运行的容器,用来区别。

| docker ps

使用例子如下:

docker推送太慢_linux_06


docker ps -a 可以看到更详细的运行容器情况。

| docker ps -a
进入已有container容器

进入已经运行的容器吧。这里就用到了CONTAINER ID,可以唯一表示容器,在docker exec -it 后加上CONTAINER_ID 加上/bin/bash,便可以重新进入容器里拉。

| docker exec -it CONTAINER_ID /bin/bash

使用例子如下:

docker推送太慢_bash_07

容器里和容器外的如何数据互通(数据映射)

想要在容器里使用容器外的数据,那么就需要让容器找到容器以为的数据路径。这里用到了docker run -v 这个命令,-v 后面加上<(我们想要放到容器里的)宿主机目录>:<容器目录>,这样宿主机目录就会放到容器目录下了,在交互模式里,就可以在容器目录下看到宿主机目录的文件了,是不是很方便啊,没懂的可以看以下例子:

比如,我们想把主机里/root/data/picture里的文件在容器里运行,但是容器和主机是隔离的,我们在容器里找到我们想放这些文件的目录,比如是/app/data下吧,我们就可以用上么的命令,把/root/data/picture 的文件都放到/app/data 里拉。命令例子如下:

docker run -v /root/data/picture:/app/data /bin/bash
删除我们不需要的容器和镜像

使用docker rm 加上容器ID便可以删除我们不需要的容器了,当删除不掉的时候,可以加上–force强制删除哦。

删除container

docker rm CONTAINER_ID

强制删除container

docker rm --force CONTAINER_ID
保存更新对容器的操作

当我们对容器里进行更新后,希望保存这些操作到镜像,可以commit操作到原有的镜像或者新的镜像,用如下命令。若想保存更改到原有镜像,在REPOSITORY[:TAG]中可以填写原有镜像。若想保存为新的镜像,可在这里写成心仪的镜像名和Tag。

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
容器中使用gpu

使用如下代码,可以把gpu映射到容器中使用:

docker run --gpu all imageName