docker 常用命令

docker 常用命令

bash 复制代码
# 查看容器状态
docker ps
docker-compose ps
# 启动服务 -d 标志表示在后台运行
docker-compose up -d
# 停止服务
docker-compose down

docker-compose.yml

bash 复制代码
version: '3'
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    hostname: gitlab-server
    restart: always
    ports:
      - "2222:22"
      - "8443:443"
      - "8888:80"
      - "7000:7000"
    volumes:
      - /srv/gitlab/config:/etc/gitlab
      - /srv/gitlab/logs:/var/log/gitlab
      - /srv/gitlab/data:/var/opt/gitlab

docker run: 运行一个新的 Docker 容器。

  • --detach: 以分离模式运行容器,这意味着容器在后台运行,命令行不会挂起在容器的日志输出上。
  • --hostname: 设置容器的主机名。
  • --publish: 将容器内的端口映射到宿主机的端口。这里将容器内的 80 端口(GitLab 默认的 HTTP 端口)映射到宿主机的 8888 端口上。
  • --name: 为容器指定一个名字,
  • --volume: 将宿主机的目录或文件系统挂载到容器内。这里挂载了三个卷:
  • /srv/gitlab/config:/etc/gitlab: 将宿主机的 /srv/gitlab/config 目录 挂载到容器的 /etc/gitlab 目录。这用于存储 GitLab 的配置文件。
  • /srv/gitlab/logs:/var/log/gitlab: 将宿主机的 /srv/gitlab/logs 目录 挂载到容器的 /var/log/gitlab 目录。这用于存储 GitLab 的日志文件。
  • /srv/gitlab/data:/var/opt/gitlab: 将宿主机的 /srv/gitlab/data 目录 挂载到容器的 /var/opt/gitlab 目录。这是 GitLab 存储其数据的地方,包括仓库、用户上传的文件等。

启动服务

docker-compose up -d

-d 标志表示在后台运行

docker-compose down

如果您不想每次都使用 sudo 来运行 Docker 相关的命令,可以将您的用户添加到 docker 组:

创建sudo groupadd docker

添加sudo usermod -aG docker $USER

然后重启服务器或注销重新登录

如何在docker 中通过命令行启动一个部署了gitlab服务的容器

要在Docker中通过命令行启动一个部署了GitLab服务的容器,你需要执行docker run命令,并指定相应的参数来配置GitLab。以下是一个基本的命令行示例,它将启动一个带有GitLab的Docker容器:

bash 复制代码
docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

这个命令的参数说明如下:

  • --detach:在后台运行容器。
  • --hostname:设置容器的主机名。
  • --publish:将容器内的端口映射到宿主机的端口。这里分别映射了HTTPS、HTTP和SSH服务所使用的端口。
  • --name:给容器指定一个名称,这里是gitlab。
  • --restart always:确保Docker在停机后重启容器。
  • --volume:将宿主机的目录或文件映射到容器内部的相应位置,用于持久化配置、日志和数据。
  • gitlab/gitlab-ce:latest:指定要使用的GitLab Docker镜像和标签。

请注意,你需要将gitlab.example.com替换为你的GitLab实例的主机名或IP地址。如果你使用的是IP地址,确保相应地更新--hostname参数。

此外,/srv/gitlab/config、/srv/gitlab/logs和/srv/gitlab/data是宿主机上用于持久化GitLab数据的目录。你需要确保这些目录已经创建,并且Docker有权限访问它们

将docker镜像导入到离线的服务器中

构建 Docker 镜像

docker build -t my-flask-app .

保存镜像为 tar 文件

docker save my-flask-app > my-flask-app.tar docker save -o nginx_image.tar nginx:1.23

导入镜像

docker load < my-flask-app.tar sudo docker load -i /mnt/usb/nginx_image.tar

运行容器

docker run -d -p 3001:3001 my-flask-app

linux 中运行的容器,如何进入其控制台

docker exec命令,这个命令允许你在运行中的容器内部启动一个新的命令行会话

  1. 查找容器 ID 或名称: 首先,你需要知道你想要进入的容器的 ID 或名称。可以通过运行以下命令来获取正在运行的容器列表及其 ID:
bash 复制代码
docker ps
  1. 进入容器的命令行: 使用 docker exec 命令来启动一个交互式的 bash 会话。替换<container_id_or_name>为你从上一步得到的容器 ID 或名称:
bash 复制代码
docker exec -it <container_id_or_name> /bin/bash
docker exec -it 4073244df5e4 /bin/bash

这个命令中的-it 参数是两个参数的组合:

  • -i(或--interactive)保证了你可以与容器内的 bash 会话进行交互。
  • -t(或--tty)为你分配一个文本终端。 如果容器内部没有 bash,你可以尝试使用 sh,即:
bash 复制代码
docker exec -it <container_id_or_name> /bin/sh
  1. 使用容器的命令行: 一旦进入了容器,你就可以像在本地 Linux 命令行界面一样执行命令了。

  2. 退出容器: 当你完成操作后,可以通过输入 exit 命令或使用组合键 Ctrl+D 来退出容器的命令行界面。

查看容器的详细信息,端口映射,卷挂载等信息

docker inspect <container_id_or_name> 这里,<container_id_or_name>是你想要检查的容器的ID或名称。如果你不确定容器的ID或名称,可以使用docker ps来查看当前运行的容器列表。 docker inspect命令的输出非常详细,为了更容易地找到特定的信息,你可以使用--format选项或者JSON处理工具如jq来提取特定字段。

例如,要查看容器的端口映射,可以使用以下命令:

docker inspect --format='{{.NetworkSettings.Ports}}' <container_id_or_name> docker inspect --format='{{.NetworkSettings.Ports}}' 20078982d954

对于卷挂载信息,你可以使用:

docker inspect --format='{{.Mounts}}' <container_id_or_name>

为了将一个文件从宿主机复制到容器内部的指定路径下,你可以使用 Docker 的 docker cp 命令。这个命令的基本语法如下:

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

这里:

SRC_PATH 是宿主机上的文件或目录的路径。

CONTAINER 是目标容器的ID或名称。

DEST_PATH 是容器内部的目的路径。

假设你想要将名为 example.txt 的文件从宿主机复制到容器 mycontainer 内部的 /usr/src/app 目录下,你可以使用以下命令:

docker cp example.txt mycontainer:/usr/src/app/

如果你需要从容器复制文件回到宿主机,可以将源路径和目标路径倒置:

docker cp mycontainer:/usr/src/app/example.txt .

这会将容器 mycontainer 中的 /usr/src/app/example.txt 文件复制到当前工作目录。

在使用这个命令时,请确保:

  • 容器处于运行状态。
  • 你有足够的权限在容器内部的目标路径下写入文件。
  • 如果容器不在运行状态,你需要先启动它。此外,对于复制到容器内部,你可能需要随后进入容器并确保文件权限和所有权设置正确,以便应用能够正确地访问该文件。

docker 推送本地镜像到远端registry

bash 复制代码
# 将名为 old-image:latest 的镜像标签修改为 new-image:latest,可以运行以下命令:
docker tag old-image:latest new-image:latest
docker tag gitlab-ce:latest gitlab-ce:14.6.1

# 先给本地镜像标签要推送到哪个远端仓库
docker tag local-image:tag 10.146.212.109:8080/your-repo-name/remote-image-name:tag
# docker tag virtual-platform-server:latest 10.146.212.109:7000/root/virtual-platform-server:latest

# 推送
docker push 10.146.212.109:8080/your-repo-name:tag
# docker push 10.146.212.109:7000/root/virtual-platform-server:latest

如何删除镜像

要删除Docker镜像,你可以使用以下命令:

bash 复制代码
# 删除单个镜像:
docker rmi [OPTIONS] IMAGE [IMAGE...]
# 例如,如果你想删除一个名为 ubuntu:18.04 的镜像,你可以使用:
docker rmi ubuntu:18.04

# 删除多个镜像:
# 你可以一次删除多个镜像,只需在命令中列出所有想要删除的镜像ID或名称:
docker rmi image1 image2 image3
# 替换 image1, image2, image3 为你想删除的镜像的名称或ID。

# 强制删除镜像:
# 如果某个镜像被容器使用中,标准的 docker rmi 命令无法删除它。如果你确定要删除,可以添加 -f 或 --force 选项来强制删除:
docker rmi -f image_name

# 删除所有未使用的镜像:
# 如果你想删除所有未被任何容器引用的镜像,可以使用:
docker image prune -a

这将会询问你是否确定要删除这些未使用的镜像。如果你想自动确认,可以使用 -f 或 --force 选项。

运行或重启或删除或停止容器

要删除Docker中的一个容器,你可以使用docker rm命令。如果容器正在运行,你首先需要停止它,然后才能删除。以下是相关的命令:

bash 复制代码
# 运行容器  -i 进入交互式shell
docker start <container_name>
# 停止容器(如果正在运行):
docker stop [容器ID或名称]
# 删除容器:
docker rm [容器ID或名称]
# 如果你想强制删除一个正在运行的容器,可以结合使用-f(或--force)参数:
docker rm -f [容器ID或名称]
# 请确保替换[容器ID或名称]为你要删除的容器的实际ID或名称。

使用容器运行镜像

要在Docker中运行一个容器,您可以使用docker run命令。这是一个非常强大和多参数的命令,允许您指定运行容器的各种选项,例如环境变量、卷挂载、网络设置和更多。以下是一个简单的例子,展示了如何使用docker run命令:

bash 复制代码
docker run [选项] 镜像 [命令] [参数]
# [选项]:可以是如-d(后台运行)、--name(指定容器名称)、-p(端口映射)、-v(卷挂载)等。
# 镜像:是您想要运行的Docker镜像的名称。
# [命令]:是容器内部启动时要运行的命令。
# [参数]:是要传递给命令的参数。
# 例如,要在后台运行名为mynginx的nginx容器并映射端口80到主机的端口8080,可以使用以下命令:
docker run -d --name mynginx -p 8080:80 nginx

在这个例子中,-d表示容器将在后台运行,--name mynginx设置容器的名称为mynginx,-p 8080:80将容器的80端口映射到主机的8080端口上,nginx是从Docker Hub上拉取的nginx官方镜像。

wsl2 ubuntu18.04 运行docker

在WSL中安装Docker Engine 您可以直接在WSL环境中安装Docker Engine,而无需使用Docker Desktop。请按照以下步骤在WSL中安装Docker:

bash 复制代码
# 更新软件包列表:
sudo apt-get update
# 安装依赖包:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
#添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#设置稳定的存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#再次更新软件包列表:
sudo apt-get update


#1. 安装Docker CE:
sudo apt-get install docker-ce
#2. 运行Docker Daemon
#由于在WSL中通常不能以常规方式启动服务,您可能需要手动启动Docker Daemon:
sudo dockerd &
#请注意,这将在后台启动Docker Daemon。
#3. 在WSL中使用Docker客户端
#安装了Docker Engine后,您应该能够使用Docker客户端,如常规Linux安装那样。可以尝试运行一些基本的Docker命令来验证:
docker run hello-world
#4. 自动启动Docker Daemon(可选)
#如果您希望每次启动WSL时自动启动Docker Daemon,可以在您的 ~/.bashrc 文件中添加以下行:

sudo dockerd > /dev/null 2>&1 &
#每次打开一个新的终端时,这将尝试启动Docker Daemon。
相关推荐
许野平40 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
LunarCod3 小时前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
码农派大星。3 小时前
Spring Boot 配置文件
java·spring boot·后端
杜杜的man4 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*4 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
llllinuuu4 小时前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s4 小时前
Golang--协程和管道
开发语言·后端·golang
为什么这亚子4 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
想进大厂的小王4 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构