Docker容器
Docker容器
一、docker容器的操作
从根本上讲,一个容器不过是一个正在运行的进程,并对其应用了一些附加的封装功能,以使其与主机和其他容器隔离。容器隔离的最重要方面之一是每个容器都与自己的专用文件系统进行交互。该文件系统由Docker镜像提供。镜像包括运行应用程序所需的一切代码或二进制文件,运行时依赖项以及所需的任何其他文件系统对象。
1.1 创建容器
docker create -it 镜像名称 -i # 让容器的标准输入保持打开 -t # 分配一个伪终端并绑定到容器的标准输入上 -d # 容器启动后会进入后台 --name # 对创建的容器取名,不加时系统会随机取名
1.2 启动容器
docker start 容器名/容器ID # docker start只能启动已经创建好的容器
1.3 创建并运行容器
除了创建容器后通过start命令来启动,也可以直接新建并启动容器。所需要的命令主要为docker run,等价于先执行docker create命令,再执行docker start命令。下面的命令启动一个bash终端,运行用户进行交互。
# 创建运行容器并进入容器中 docker run -it 镜像名称 /bin/bash exit # 退出容器,这样的情况退出容器后,容器就停止运行了 # 创建运行容器 docker run -itd 镜像名称 /bin/bash
对于创建的bash容器,当用户使用exit命令退出bash进程之后,容器也会自动退出。这是因为对于容器来说,当其中的应用退出后,容器的使命完成,也就没有继续运行的必要了。
1.4 查看容器
docker ps # 查看正在运行的容器 docker ps -a # 查看容器
1.5 停止运行容器
# 暂停正在运行的容器 docker pause 容器名/容器ID # 恢复运行暂停状态的容器 docker unpause 容器名/容器ID # 终止正在运行的容器。 docker stop 容器名/容器ID # 终止正在运行的容器后,执行docker container prune命令,会自动清除掉所有处于停止状态的容器 docker container prune
1.6 进入容器
docker attach # 不建议大家使用docker attach,因为退出容器终端,会导致容器的停止。 docker exec # 推荐大家使用docker exec命令,因为退出容器终端,不会导致容器的停止。
docker attach 容器名 docker exec -it 容器名 /bin/bash(/bin/shell)
1.7 删除容器
docker rm 容器名称 # 只能删除停止的容器 docker rm 容器名称 -f # 强制删除,可以删除正在运行的容器
1.8 导入与导出容器
某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用docker的导入和导出功能,这也是docker自身提供的一个重要特性。
导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令。"-o"选项也可以使用重定向来代替
docker export -o ~.tar.gz 容器ID
导入容器,导出的文件又可以使用docker import命令导入变成镜像。
docker import ~.tar.gz 镜像名(自己取名)
二、docker容器的应用
2.1 容器端口映射
2.1.1 映射随机端口
当我们启动一个Web容器的时候,可以将容器的端口映射宿主机上面,这样便于我们访问该Web服务器。-P参数将容器内部使用的80端口映射到宿主机的随机端口上来。
映射端口在创建容器时添加,如:
docker run --name mynginx -itd -P nginx:latest
docker ps # 可查看端口 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7561fb76f369 nginx:latest "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 0.0.0.0:32768->80/tcp, :::32768->80/tcp mynginx
浏览器访问nginx容器的内容:192.168.100.5:32768

2.1.2 映射指定端口
我们也可以通过-p参数将容器内的80端口映射到宿主机的指定带端口上
docker run --name ynginx -itd -p 8080:80 nginx:latest # -p指定端口时,先写宿主机端口,再写容器内的80端口
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0da0592a288d nginx:latest "/docker-entrypoint.…" 8 seconds ago Up 6 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp ynginx 7561fb76f369 nginx:latest "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:32768->80/tcp, :::32768->80/tcp mynginx
浏览器访问nginx容器的内容:192.168.100.5:8080

2.2 目录/文件映射
使用-v选项
docker run --name ccnginx -itd -p 80:80 -v /www:/usr/share/nginx/html nginx:latest # -v后面也是先写宿主机的目录,再写容器内的目录
# 我们映射的是nginx默认网页存放的目录 # 在映射目录/www里编写网页 echo "Hello World" > /www/index.html
浏览器访问192.168.100.5

2.3 查看容器的日志信息
可以使用docker logs查看容器的日志信息,例如:我们想要查看ccnginx容器的访问日志,除了可以 查看访问日志以外,只要是该容器产生的日志都会显示出来,包括服务的启动/关闭之类的。
docker logs ccnginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2025/09/29 10:26:23 [notice] 1#1: using the "epoll" event method 2025/09/29 10:26:23 [notice] 1#1: nginx/1.29.1 2025/09/29 10:26:23 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14+deb12u1) 2025/09/29 10:26:23 [notice] 1#1: OS: Linux 3.10.0-957.el7.x86_64 2025/09/29 10:26:23 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 65536:65536 2025/09/29 10:26:23 [notice] 1#1: start worker processes 2025/09/29 10:26:23 [notice] 1#1: start worker process 29 2025/09/29 10:26:23 [notice] 1#1: start worker process 30 2025/09/29 10:26:23 [notice] 1#1: start worker process 31 2025/09/29 10:26:23 [notice] 1#1: start worker process 32 192.168.100.1 - - [29/Sep/2025:10:28:31 +0000] "GET / HTTP/1.1" 200 12 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" "-" 2025/09/29 10:28:31 [error] 29#29: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.100.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.100.5", referrer: "http://192.168.100.5/" 192.168.100.1 - - [29/Sep/2025:10:28:31 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.100.5/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0" "-"
2.4 查看容器详细信息
可以使用docker inspect查看容器的详细信息,例如:我们想要查看ccnginx容器详细信息,会显示,容器是什么时候创建的,使用的什么镜像,容器端口号,使用的什么网络等等。
# 查看容器ccnginx的映射目录
docker inspect -f "{{.HostConfig.Binds}}" ccnginx
[/www:/usr/share/nginx/html]
更多推荐



所有评论(0)