docker是一个容器,我们可以在其中搭建多个环境,在Linux平台上无需启动虚拟机
启动一个容器的时间相比虚拟机也更加迅速

要想启动一个容器,首先需要一个镜像

我们可以使用以下命令下载一个镜像

xm137@xm137-virtual-machine:~$ sudo docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest

下载完成以后我们可以查看已有的镜像

xm137@xm137-virtual-machine:~$ sudo docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    a04dc4851cbc   2 months ago   78.1MB
hello-world   latest    74cc54e27dc4   2 months ago   10.1kB

下载完镜像以后,我们需要基于镜像创建容器,

使用以下命令可以创建并启动容器

xm137@xm137-virtual-machine:~$ sudo docker run -itd --name ubuntu-test ubuntu /bin/bash
3497ac84ffbcfdbee65614da7bacf97561c63df0950aa6e9699d965f122430b8

注意,这不是单纯的容器启动命令,是创建并启动容器

参数-i是使用交互式操作-t是使用终端-d是在后台运行--name为容器指定一个名字

单独使用-i可以与之交互,命令可以照常打,虽说有点不舒服
单独使用-t只是终端,Ctrl+C 三次退出后,容器仍在运行

建议-it连起来使用

sudo docker run -it ubuntu

单独使用-it新建的容器Ctrl+D停止或正常退出容器随后会停止

/bin/bash 是要执行的命令 ,为什么启动的是/bin/bash,通过bash我们可以在终端执行命令行

注意: 有些时候/bin/bash不是必须要加

现在,其在后台运行

使用以下命令查看正在运行的容器

xm137@xm137-virtual-machine:~$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
3497ac84ffbc   ubuntu    "/bin/bash"   40 seconds ago   Up 40 seconds             ubuntu-test

在有了容器以后,我们就可以使用命令启动容器了

不指定名字的话,会生成一个名字

让我们生成几个看看

xm137@xm137-virtual-machine:~$ sudo docker run -itd ubuntu
a225c2bc8373a17549573262b5a4713c347cb733f1d327e2a6771ece512bc2d7
xm137@xm137-virtual-machine:~$ sudo docker run -itd ubuntu
e0bc9fb7abc77e22ff62fde627cbd1b9f7926b31ea384b37ef1fc3e16207fec2
xm137@xm137-virtual-machine:~$ sudo docker run -itd ubuntu
2199b7f97b3edbea07a90250bcb329a0beee4b1085aff4f4478e45540094ee4f
xm137@xm137-virtual-machine:~$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
2199b7f97b3e   ubuntu    "/bin/bash"   7 seconds ago   Up 7 seconds             friendly_agnesi
e0bc9fb7abc7   ubuntu    "/bin/bash"   8 seconds ago   Up 7 seconds             elastic_babbage
a225c2bc8373   ubuntu    "/bin/bash"   9 seconds ago   Up 8 seconds             mystifying_chaplygin
xm137@xm137-virtual-machine:~$ 

在有了容器以后
使用容器ID来启动容器

xm137@xm137-virtual-machine:~$ sudo docker start 3497ac84ffbc
3497ac84ffbc

也可以使用名字

xm137@xm137-virtual-machine:~$ sudo docker start ubuntu-test
ubuntu-test

与容器交互
docker attach 退出后容器也将停止

xm137@xm137-virtual-machine:~$ sudo docker attach 3497ac84ffbc
3497ac84ffbc:/# 

docker exec 在执行完成以后,容器不会退出

xm137@xm137-virtual-machine:~$ sudo docker exec -it 3497ac84ffbc /bin/bash
root@3497ac84ffbc:/# 

最后的/bin/bash可以换成其他的命令
其中的-it可以试试不加会怎么样,不加-t的话,会缺少一些回显,不加-i可能会遇到一些交互上的问题
例如apt upgrade 想输入n取消一下

停止容器

xm137@xm137-virtual-machine:~$ sudo docker stop 3497ac84ffbc
3497ac84ffbc

重启容器

xm137@xm137-virtual-machine:~$ sudo docker restart 3497ac84ffbc
3497ac84ffbc

以下命令查看所有容器,包括已经停止的容器

xm137@xm137-virtual-machine:~$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                       PORTS     NAMES
3497ac84ffbc   ubuntu    "/bin/bash"   9 minutes ago   Exited (137) 2 seconds ago             ubuntu-test

删除容器

xm137@xm137-virtual-machine:~$ sudo docker rm 3497ac84ffbc
3497ac84ffbc

删除镜像,可以使用仓库名称或者镜像ID来删除镜像

下面以删除hello-world为例子

xm137@xm137-virtual-machine:~$ sudo docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:7e1a4e2d11e2ac7a8c3f768d4166c2defeb09d2a750b010412b6ea13de1efb19
Deleted: sha256:74cc54e27dc41bb10dc4b2226072d469509f2f22f1a3ce74f4a59661a1d44602
Deleted: sha256:63a41026379f4391a306242eb0b9f26dc3550d863b7fdbb97d899f6eb89efe72
xm137@xm137-virtual-machine:~$ sudo docker rmi 74cc54e27dc4
Untagged: hello-world:latest
Untagged: hello-world@sha256:7e1a4e2d11e2ac7a8c3f768d4166c2defeb09d2a750b010412b6ea13de1efb19
Deleted: sha256:74cc54e27dc41bb10dc4b2226072d469509f2f22f1a3ce74f4a59661a1d44602
Deleted: sha256:63a41026379f4391a306242eb0b9f26dc3550d863b7fdbb97d899f6eb89efe72

为了演示,其中已经删除一些

参考链接