下面的例子我们打算用 ubuntu镜像来演示, 我们可以使用 docker pull 命令来拉取 ubutun镜像
docker pull ubuntu
以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
docker run -it --name mytest ubuntu /bin/bash
参数说明:
-i: 交互式操作。 -t: 终端。 --name: 容器名字 ubuntu: ubuntu 镜像。 /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。 要退出终端,直接输入 exit:
root@1c919efeb69f:/# exit
-i 如果在一些CICD里面跑是会报 the input device is not a TTY. 需要把这个参数去掉
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
docker run -itd ubuntu /bin/bash
注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec, 或者 docker attach(下面会介绍到)。
查看所有的容器命令如下:
docker ps -a
会看到如下的信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c919efeb69f ubuntu "/bin/bash" 25 minutes ago Exited (0) 6 seconds ago dreamy_cori
2db7864bcb5a nginx "/docker-entrypoint.…" 27 minutes ago Exited (0) 26 minutes ago sharp_engelbart
docker start
docker start b750bbbcfd88 用Id
docker start dreamy_cori 用名字
停止一个容器 停止容器的命令如下:
docker stop <Container ID or Name>
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下两个指令进入: docker attach docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
将本地标准输入,输出和错误流附加到正在运行的容器。 比如我们进入前面我们运行的 ubuntu bash
docker attach 1c919
root@1c919efeb69f:/#
可以开多个终端一起进入,然后这多个终端看到的输入和输出是一样的 输入exit的话会导致容器停止运行.
下面演示了使用 docker exec 命令。
docker exec -it 1c919 bash
进入成功后会看到如下的 root@1c919efeb69f:/# 注意: 如果从这个容器退出,不会导致容器的停止,(这个相当于在容器内跑了两个进程) 有一些容器没有bash 可以试一下用 sh
替换原来的 entrypoint 执行我们自己的脚本等
docker run -it --name mytest2 --entrypoint sh --rm malema
docker run -it --name mytest2 --entrypoint sh --rm malema -l migration.sh
要执行的参数migration.sh放在了镜像的后面了
也可以把参数通过环境变量传进去。 migration.sh 里面可以用 $connstr
docker run -it --name mytest2 -e connstr="数据库连接字符串" --entrypoint sh --rm malema -l migration.sh
删除容器使用 docker rm 命令:
docker rm -f 654789798as
docker container prune
docker commit containerName imageName
docker logs 1c919
docker logs --help 可以看到更详细的帮助 我们比较常用的是会加上 -f 参数
docker logs -f 1c919
这样容器有新的输出我们就可能直接看到了 或者 --tail 20 输出最后的20条
docker logs --tail 2 1c919