Docker 常用命令
镜像管理
从 Docker Hub 搜索镜像:
docker search centos
下载镜像:
docker pull centos
列出所有本地镜像:
docker images
删除不被容器引用的镜像:
docker rmi IMAGE_ID
容器管理
启动前台运行的新容器
使用镜像启动一个在前台运行的新容器,并提供/bin/bash 来访问该容器:
docker run -it --name centos centos /bin/bash
退出容器:
ctrl-d
:退出 Docker 交互式会话,同时也关闭容器ctrl-p-q
:将交互模式切换为守护程序模式(保持容器在后台运行,并返回至主机控制台)
将当前终端附加到一个运行中的容器:
docker attach CONTAINER_ID
启动后台运行的新容器
使用镜像启动一个在后台运行的新容器:
docker run -d -p 2222:22 --name ubuntu-ssh tecadmin/ubuntu-ssh:16.04
在一个后台运行中的容器中执行命令,如进入容器中的 bash:
docker exec -it CONTAINER_ID /bin/bash
查看容器
列出所有容器(包含已关闭的容器):
docker ps -a
查看容器详细信息:
docker inspect CONTAINER_ID
启动和停止容器
启动一个已停止的容器:
docker start CONTAINER_ID
停止一个已启动的容器:
docker stop CONTAINER_ID
删除容器
删除已停止运行的容器:
docker rm CONTAINER_ID
数据卷
容器数据卷
创建数据卷容器:
docker create -v /data --name data_container centos
在新容器中使用数据卷容器:
docker run -it --volumes-from data_container centos /bin/bash cd /data echo "Hello Docker" > file.txt
在新容器中使用数据卷容器,验证数据卷上的文件:
docker run -it --volumes-from data_container centos /bin/bash cd /data ls
主机数据卷
将主机上的 ~/Desktop/WorkSpace
目录共享(挂载)到 Docker 容器的 /data
目录:
docker run -it -v ~/Desktop/WorkSpace:/data centos
Dockerfile
$ tree dockerfile
dockerfile
├── Dockerfile
├── README.md
└── html
└── index.html
1 directory, 3 files
$ cat dockerfile/Dockerfile
FROM tecadmin/ubuntu-ssh:16.04
LABEL maintainer="rahul@tecadmin.net"
RUN apt-get update \
&& apt-get install -y apache2
COPY html/* /var/www/html/
WORKDIR /var/www/html
CMD ["apachectl", "-D", "FOREGROUND"]
EXPOSE 80
使用当前目录中的 Dockerfile 构建镜像:
docker build -t apache_image .
使用构建后的镜像,运行一个新容器:
docker run -it -p 8080:80 apache_image
Docker 网络
容器默认都会连接到 bridge 网络
列出主机上当前可用的 Docker 网络:
docker network ls
创建 Docker 网络:
docker network create -d bridge my-bridge-network
将容器连接到指定网络,之后便可以与同一网络中的其他容器通信:
docker network connect my-bridge-network centos
从指定网络断开容器:
docker network disconnect my-bridge-network centos
查看网络详细(查看所有连接到该网络的容器):
docker network inspect my-bridge-network
删除网络:
docker network rm my-bridge-network
Docker Compose
设置多容器环境
$ tree dockercompose
dockercompose
├── docker-compose.yml
└── webapp
├── Dockerfile
└── index.html
1 directory, 3 files
$ cd dockercompose
$ cat docker-compose.yml
version: '3'
services:
db:
image: mysql
container_name: mysq_db
restart: always
environment:
- MYSQL_ROOT_PASSWORD="root123"
web:
image: apache
build: ./webapp
depends_on:
- db
container_name: apache_web
restart: always
ports:
- "8080:80"
$ cat webapp/Dockerfile
FROM tecadmin/ubuntu-ssh:16.04
RUN apt-get update \
&& apt-get install -y apache2
COPY index.html /var/www/html/
WORKDIR /var/www/html
CMD ["apachectl", "-D", "FOREGROUND"]
EXPOSE 80
构建镜像:
docker-compose build
启动容器(守护进程):
docker-compose up -d
更新容器内容:
docker-compose build docker-compose up -d
删除对象
对象包含 image、container、volume 和 network
删除所有未使用的对象:
docker system prune
删除所有未使用的镜像:
docker image prune
删除所有已停止的容器:
docker container prune
删除所有未是用的数据卷:
docker volume prune
删除所有未使用的 Docker 网络:
docker network prune
容器服务
MySQL
启动一个 MySQL 服务:
docker run -d -p 3306:3306 --name mysql \ -e MYSQL_ROOT_PASSWORD=root123 -e TZ=Asia/Shanghai mysql
查看 MySQL 服务的容器 IP 地址(用于容器间通信):
docker inspect mysql | grep "IPAddress"
将 MySQL 镜像用作 MySQL 客服端(容器间通信):
docker run -it --network bridge --rm mysql mysql -h172.17.0.4 -uroot -proot123
将 MySQL 镜像用作 MySQL 客服端(非 Docker 或远程服务):
docker run -it --rm mysql mysql -h192.168.1.141 -P3306 -uroot -proot@mysql
Redis
启动一个 Redis 服务:
docker run -d -p 6379:6379 --name redis redis
查看 Redis 服务的容器 IP 地址(用于容器间通信):
docker inspect redis | grep "IPAddress"
将 Redis 镜像用作 Redis 客服端(容器间通信):
docker run -it --network bridge --rm redis redis-cli -h 172.17.0.3 -p 6379
将 Redis 镜像用作 Redis 客服端(非 Docker 或远程服务):
docker run -it --rm redis redis-cli -h 10.210.25.177 -p 6379
运行一个 Spring Boot 项目容器
Java 8
docker run --name my_server -d -p 8080:8080 -v ~/Desktop/my_server/:/my_server -w /my_server openjdk:8-jre-alpine java -jar target/my_server.jar
Java 11
docker run --name my_server_java11 -d -p 8080:8080 -v ~/Desktop/my_server_java11/:/my_server -w /my_server adoptopenjdk/openjdk11:jre-11.0.10_9-alpine java -jar target/my_server.jar
docker logs --follow my_server_java11
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论