Docker 容器使用最详细实测教程及相关命令使用(附镜像,容器命令干货)!!
Docker 容器相关命令使用实测教程
Docker安装(CentOs 7)不在赘述!
Docker 客户端
docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。
[root@localhost ~]# docker
Usage: docker COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Management Commands:
config Manage Docker configs
container Manage containers
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a containe
......
可以通过命令 docker command —help 更深入的了解指定的 Docker 命令使用方法。
例如我们要查看 docker stats 指令的具体使用方法:
[root@localhost ~]# docker stats --help
Usage: docker stats [OPTIONS] [CONTAINER...]
Display a live stream of container(s) resource usage statistics
Options:
-a, --all Show all containers (default shows just running)
--format string Pretty-print images using a Go template
--no-stream Disable streaming stats and only pull the first result
--no-trunc Do not truncate output
容器使用
获取镜像
如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
root@localhost ~]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
5c939e3a4d10: Pull complete
c63719cdbe7a: Pull complete
19a861ea6baf: Pull complete
651c9d2d6c4f: Pull complete
Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Status: Downloaded newer image for ubuntu:latest
查看镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
hello-world latest fce289e99eb9 13 months ago 1.84kB
启动容器
以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
[root@localhost ~]# docker run -it ubuntu /bin/bash
root@b5ebd079a17a:/#
参数说明:
- -i: 交互式操作。
- -t: 终端。
- ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入exit
:root@de4f1201e994:/# exit
exit
[root@localhost ~]#
启动已停止运行的容器
查看所有的容器命令如下:docker ps -a
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de4f1201e994 ubuntu "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago eager_agnesi
[root@localhost ~]#
使用 docker start 启动一个已停止的容器:
[root@localhost ~]# docker start de4f1201e994
de4f1201e994
查看:status
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de4f1201e994 ubuntu "/bin/bash" 7 minutes ago Up 2 minutes eager_agnesi
已启动!
后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d
指定容器的运行模式docker run -itd --name ubuntu-test ubuntu /bin/bash
。
[root@localhost ~]# docker run -itd --name ubuntu-test ubuntu /bin/bash
ba63444432b4a0218dd6566a62724c85bb492664600c3d00c7e72f37817dd6be
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba63444432b4 ubuntu "/bin/bash" 40 seconds ago Up 39 seconds ubuntu-test
停止一个容器
停止容器的命令如下:docker stop <容器 ID>
[root@localhost ~]# docker stop ba63444432b4
ba63444432b4
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba63444432b4 ubuntu "/bin/bash" 3 minutes ago Exited (0) 3 seconds ago ubuntu-test
停止的容器可以通过 docker restart 重启:docker restart <容器 ID>
[root@localhost ~]# docker restart ba63444432b4
ba63444432b4
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba63444432b4 ubuntu "/bin/bash" 4 minutes ago Up 3 seconds ubuntu-test
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:docker attach
或者docker exec
- docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
docker attach: 该命令会导致容器停止,而且该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
下面演示了使用 docker attach 命令。[root@localhost ~]# docker attach ba63444432b4
root@ba63444432b4:/# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba63444432b4 ubuntu “/bin/bash” 8 minutes ago Exited (0) 3 seconds ago ubuntu-test
注意: 如果从这个容器退出,会导致容器的停止。
docker exec的用法docker exec -it <容器 ID> /bin/bash
[root@localhost ~]# docker exec -it ba63444432b4 /bin/bash
root@ba63444432b4:/# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba63444432b4 ubuntu "/bin/bash" 18 minutes ago Up 39 seconds ubuntu-test
导出和导入容器
导出容器
如果要导出本地某个容器,可以使用 docker export
命令。
[root@localhost ~]# docker export ba63444432b4 > ubuntu.tar
[root@localhost ~]# ll
total 65036
-rw-------. 1 root root 1569 Feb 13 15:11 anaconda-ks.cfg
-rw-rw-r--. 1 root root 13216 Feb 16 22:16 get-docker.sh
-rw-rw-r--. 1 root root 66572800 Feb 17 19:43 ubuntu.tar
这样将导出容器快照到本地文件。
导入容器快照
可以使用 cat <容器快照> | docker import - <镜像名称 >:<版本>
从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu
[root@localhost docker]# cat ./ubuntu.tar | docker import - test/ubuntu:v1
sha256:ae30cd63ebe33cf2e0673f5afd94b922957f87439ef306275fe0b93280d3df3d
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/ubuntu v1 ae30cd63ebe3 7 seconds ago 64.2MB
此外,也可以通过指定 URL 或者某个目录来导入,例如:
docker import http://example.com/exampleimage.tgz example/imagerepo
删除容器
删除容器使用 docker rm -f <容器 ID>
命令:
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba63444432b4 ubuntu "/bin/bash" 3 hours ago Up 3 hours ubuntu-test
de4f1201e994 ubuntu "/bin/bash" 4 hours ago Exited (0) 3 hours ago eager_agnesi
b5ebd079a17a ubuntu "/bin/bash" 4 hours ago Exited (0) 4 hours ago serene_pare
[root@localhost docker]# docker rm -f ba63444432b4
ba63444432b4
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de4f1201e994 ubuntu "/bin/bash" 4 hours ago Exited (0) 3 hours ago eager_agnesi
b5ebd079a17a ubuntu "/bin/bash" 4 hours ago Exited (0) 4 hours ago serene_pare
[root@localhost docker]#
清理掉所有处于终止状态的容器docker container prune
。
运行一个 web 应用
前面我们运行的容器并没有一些什么特别的用处。
接下来让我们尝试使用 docker 构建一个 web 应用程序。
我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。
[root@localhost docker]# docker pull training/webapp
Using default tag: latest
latest: Pulling from training/webapp
e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists
a3ed95caeb02: Already exists
10bbbc0fc0ff: Already exists
fca59b508e9f: Already exists
e7ae2541b15b: Already exists
9dd97ef58ce9: Already exists
a4c1b0cb7af7: Already exists
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Image is up to date for training/webapp:latest
查看载入镜像
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
training/webapp latest 6fae60ef3446 4 years ago 349MB
启动;
[root@localhost docker]# docker run -d -P training/webapp python app.py
fc8edb0714ee6c31d9f261761756ed81cca7107216ebc76edbf26ff5b46987e9
[root@localhost docker]#
参数说明:
- -d:让容器在后台运行。
- -P:将容器内部使用的网络端口映射到我们使用的主机上
查看 WEB 应用容器
使用 docker ps 来查看我们正在运行的容器:
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc8edb0714ee training/webapp "python app.py" 4 minutes ago Up 4 minutes 0.0.0.0:32769->5000/tcp cocky_proskuriakova
[root@localhost docker]#
这里多了端口信息0.0.0.0:32769->5000/tcp
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
这时我们可以通过浏览器访问WEB应用
我们也可以通过 -p 参数来设置不一样的端口:
[root@localhost docker]# docker run -d -p 5000:5000 training/webapp python app.py
bd3cfd7c1f3a4a4cc1c124b08951438d8a3086fddfa5631572225c618315e413
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd3cfd7c1f3a training/webapp "python app.py" 17 seconds ago Up 15 seconds 0.0.0.0:5000->5000/tcp inspiring_brown
fc8edb0714ee training/webapp "python app.py" 13 minutes ago Up 13 minutes 0.0.0.0:32769->5000/tcp cocky_proskuriakova
[root@localhost docker]#
容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
网络端口的快捷方式
通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的 web 应用容器 ID 为 bd3cfd7c1f3a 名字为 inspiring_brown。
我可以使用 docker port bd3cfd7c1f3a 或 docker port inspiring_brown 来查看容器端口的映射情况。
[root@localhost docker]# docker port bd3cfd7c1f3a
5000/tcp -> 0.0.0.0:5000
[root@localhost docker]# docker port inspiring_brown
5000/tcp -> 0.0.0.0:5000
[root@localhost docker]#
查看 WEB 应用程序日志docker logs [ID或者名字]
可以查看容器内部的标准输出。
[root@localhost docker]# docker logs bd3cfd7c1f3a
* Running on http://0.0.0.0
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。
查看WEB应用程序容器的进程
我们还可以使用 docker top
来查看容器内部运行的进程
root@localhost docker]# docker top bd3cfd7c1f3a
UID PID PPID C STIME TTY TIME CMD
root 17700 17688 0 22:06 ? 00:00:00 python app.py
[root@localhost docker]# docker top inspiring_brown
UID PID PPID C STIME TTY TIME CMD
root 17700 17688 0 22:06 ? 00:00:00 python app.py
[root@localhost docker]#
检查 WEB 应用程序
使用 docker inspect
来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
[root@localhost docker]# docker inspect inspiring_brown
[
{
"Id": "bd3cfd7c1f3a4a4cc1c124b08951438d8a3086fddfa5631572225c618315e413",
"Created": "2020-02-17T14:06:42.550983374Z",
"Path": "python",
"Args": [
"app.py"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 17700,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-02-17T14:06:43.28436184Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
......
停止 WEB 应用容器
[root@localhost docker]# docker stop inspiring_brown
inspiring_brown
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd3cfd7c1f3a training/webapp "python app.py" 19 minutes ago Exited (137) 31 seconds ago inspiring_brown
重启WEB应用容器
已经停止的容器,我们可以使用命令 docker start
来启动。
[root@localhost docker]# docker start inspiring_brown
inspiring_brown
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd3cfd7c1f3a training/webapp "python app.py" 21 minutes ago Up 2 seconds 0.0.0.0:5000->5000/tcp inspiring_brown
docker ps -l
查询最后一次创建的容器:
[root@localhost docker]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd3cfd7c1f3a training/webapp "python app.py" 22 minutes ago Up About a minute 0.0.0.0:5000->5000/tcp inspiring_brown
正在运行的容器,我们可以使用 docker restart
命令来重启。
移除WEB应用容器
我们可以使用 docker rm -f
命令来删除不需要的容器
[root@localhost docker]# docker rm -f inspiring_brown
inspiring_brown
[root@localhost docker]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc8edb0714ee training/webapp "python app.py" 39 minutes ago Up 39 minutes 0.0.0.0:32769->5000/tcp cocky_proskuriakova
至此docker容器的使用实测教程已完成,
原文依照菜鸟教程进行实测;https://www.runoob.com/docker/docker-container-usage.html 如有疑问请联系删除
附:命令干货
启动停止
service docker start //启动docker后台服务
systemctl start docker
systemctl restart docker
systemctl status docker
systemctl stop docker
systemctl enable docker //开机自动启动
docker info//概要信息
docker --help
镜像常用命令
docker images --查看镜像
//Resposity:镜像名称 Tag:镜像标签 IMAGE ID :镜像ID CREATED : 镜像的创建日期
//这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
docker search 镜像名称 --搜索镜像
//Stars:用户评价 AutoMated:自动构建,表示该镜像由DockerHub自动构建流程创建的
docker pull ** --拉取镜像
docker rmi 镜像ID --按镜像id删除镜像
docker rmi `dockers images -q` --删除所有镜像
容器相关命令
查看容器
在这里插入代码片
docker ps //查看正在运行的容器
docker ps -a //查看所有的容器
docker ps -l //查看最后一次运行的容器
docker ps -f status=exited //查看停止的容器
创建容器
交互式方式创建容器
docker run -it --name=myUuntu1 ubuntu:15.10 /bin/bash
创建之后直接进入该容器,exit退出后该容器也stop
守护式方式创建容器
docker run -di --name=myUuntu2 ubuntu:15.10
登录守护式容器方式:
docker exec -it 容器名称(或容器ID) /bin/bash
创建之后就算exit退出,该容器也是up
文件拷贝
宿主机文件导入到容器
docker cp 需要拷贝的文件或目录 容器名称:容器目录
导出到宿主机文件
docker cp 容器名称:容器目录/文件 本地文件名字
目录挂载
对宿主机目录:容器目录 进行映射,这样可通过修改宿主机目录来修改容器目录
用法: -v (是目录映射) 宿主机目录:容器目录
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=myUuntu3 ubuntu:15.10
--privileged=true来解决挂载的目录无权限问题
查看容器ip地址
docker inspect 容器名称(或容器ID)
docker inspect --format='{ {.NetworkSettings.IPAddress}}' 容器名称(或容器ID)
删除容器
docker rm 容器名称(或容器ID)
各种软件的部署
Tomcat部署
1. 拉取镜像
docker pull tomcat:7-jre7
2. 创建容器
-p :表示地址映射调用 宿主9001端口操作容器端口8080
-v :目录映射 通过将文件上传的宿主文件并且映射到容器对应的文件中
-i :以交互模式运行容器
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d :后台运行容器,并返回容器ID
docker run -di --name=Mytomcat -p 9001:8080
-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
nginx
docker pull nginx
docker run -di --name=mynginx -p 80:80 nginx
Redis
docker pull Redis
docker run -di --name=myRedis -p 6379:6379 redis
迁移与备份
容器保存为镜像
docker commit mytomcat mytomcat_i
镜像备份
将镜像保存为tar文件
docker save -o mytomcat.tar mytomcat_i
镜像恢复与迁移
删除mytomcat_img后执行以下命令
docker load -i mytomcat.tar
zookeeper
#拉取zk镜像
docker pull zookeeper:3.5
#创建容器
docker create --name zk -p 2181:2181 zookeeper:3.5
#启动容器
docker start zk
mysql+配置文件映射
传送门:Linux安装MySQL5.7 (docker安装方式)
注:
干货内容来源博文:https://blog.csdn.net/cnoneo/article/details/102790550 如有疑问请联系删除!
还没有评论,来说两句吧...