Docker 常用命令

发布于 2024-11-09 05:57:58 字数 6008 浏览 3 评论 0

镜像管理

从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

叹沉浮

暂无简介

0 文章
0 评论
624 人气
更多

推荐作者

一梦浮鱼

文章 0 评论 0

mb_Z9jVigFL

文章 0 评论 0

伴随着你

文章 0 评论 0

耳钉梦

文章 0 评论 0

18618447101

文章 0 评论 0

蜗牛

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文