Docker常用命令和高级操作

一、docker常用命令

1、安装命令

sudo apt install docker.io

2、镜像管理

# 查看本地所有镜像
docker images
# 移除指定镜像
docker image rm <image_name>:<tag>/<image_id>

# 其他命令
# dockerhub(https://hub.docker.com/)实在是太慢了
# 创建容器使用本地不存在的镜像时,默认会从dockerhub拉取
docker pull
docker commit
docker tag
docker login
docker push

3、容器管理

# 查看当前运行docker容器
docker ps
# 查看环境中的所有docker容器
docker ps -a

# 指定image创建后台运行容器,进程1为:/bin/bash
docker run -itd --name <container_name> <image_name>:<tag> /bin/bash

# 启动/停止/进入容器
docker start <container_name/id>
docker stop <container_name/id>
docker attach <container_name/id>

# 指定运行容器中的进程
# 使用attach进入容器退出默认会停止容器,可以使用exec运行/bin/bash创建新的交互终端
docker exec -it <container_name/id> /bin/bash

#移除指定容器
docker rm <container_name/id>

# 将本地文件cp到容器内
docker cp <file_local_path> <containe_name/id>:<file_docker_path>
# 将容器内的文件cp到本地
docker cp <containe_name/id>:<file_docker_path> <file_local_path>

4、本地镜像分享

# 从容器导出镜像文件(当前运行容器的快照)
docker export <container_id/name> > <image_name>.tar
# 将镜像文件导入本地
docker import <image_name>.tar <image_name>:<image_tag>

# 将本地镜像导出(包含image的所有数据层,常用于迁移或备份image)
docker save -o <image_name>.tar <image_id/name>
# 将镜像文件导入到本地(不可重命名)
docker load -i <image_name>.tar

5、docker run&exec 常用参数

  • docker run --help
Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Create and run a new container from an image

Aliases:
  docker container run, docker run

Options:
...
  -d, --detach                         Run container in background and print container ID
  -e, --env list                       Set environment variables
      --env-file list                  Read in a file of environment variables
...
  -h, --hostname string                Container host name
  -i, --interactive                    Keep STDIN open even if not attached
      --ip string                      IPv4 address (e.g., 172.30.100.104)
      --ip6 string                     IPv6 address (e.g., 2001:db8::33)
...
      --name string                    Assign a name to the container
...
# 参数格式: -p <host_port>:<container_port>
  -p, --publish list                   Publish a container's port(s) to the host
...
  -t, --tty                            Allocate a pseudo-TTY
  -u, --user string                    Username or UID (format: <name|uid>[:<group|gid>])
...
# 参数格式: -v <host_dir>:<container_dir>
  -v, --volume list                    Bind mount a volume
...
  -w, --workdir string                 Working directory inside the container
  • docker exec --help
Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Execute a command in a running container

Aliases:
  docker container exec, docker exec

Options:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a container
  -e, --env list             Set environment variables
      --env-file list        Read in a file of environment variables
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format: "<name|uid>[:<group|gid>]")
  -w, --workdir string       Working directory inside the container

二、Docker高级操作

1、取消docker的sudo权限

(1)将当前用户添加到docker组

sudo gpasswd -a ${USER} docker\

(2)更新docker group

newgrp docker

(3)测试验证

docker version
2、使能IPv6网络

(1)vim /etc/docker/daemon.json

{
    "experimental": true,
    "ipv6": true,
    "ip6tables": true,
    "fixed-cidr-v6": "2000::/3"
}

(2)重启docker

sudo systemctl restart docker
3、修改镜像源

(1)vim /etc/docker/daemon.json

{
    "registry-mirrors": [
        "https://hub.docker.com""https://registry.docker-cn.com",
        "https://atomhub.openatom.cn",
        "other mirror image source"
    ]
}

(2)重启docker

sudo systemctl restart docker
4、在docker容器内使用systemd

(1)指定image创建容器

docker run -it --name <container_name> --privileged <image_name>:<tag> /bin/bash 

(2)更新软件源,部署systemd

# 更新软件源
apt update
# 更新软件
apt upgrade

# 安装systemd
apt install systemd
ln -s /lib/systemd/systemd /usr/sbin/init

# 也可以同时安装其他所需软件
# ...

安装完成后,在container内执行"exit"退出容器。
若需要docker容器支持systemd,需要将/usr/sbin/init设置为1号进程(默认为/bin/bash),因此我们需要将这个容器打包为新的镜像,基于新的镜像再创建支持systemd的新容器。

(3)将当前容器保存为新镜像

docker commit -a "<author>" -m "<commit_info>" <container_name> <image>:<tag>

(4)创建使用支持systemd的容器

# 创建容器
docker run -itd --name <container_name> --privileged <image_with_systemd_name>:<tag> /usr/sbin/init
# 进入容器
docker exec -it <container_name> /bin/bash
5、固定docker容器ip地址

当创建docker容器时固定ip地址,需要创建自定义网络,docker安装后配置的默认网络不支持设置静态ip。
当我们使用安装后默认的网络(比如bridge)设置静态ip时,会看到以下报错:

dev@ubuntu: docker run -it --ip 172.18.0.2 --network bridge --name network_test ubuntu:latest
docker: Error response from daemon: user specified IP address is supported on user defined networks only.
ERRO[0000] error waiting for container:

我们可以使用docker network命令创建自定义网络,用于创建固定ip的容器(实测支持IPv4/IPv6的静态IP设置)。
(1)docker network工具

# 查看命令帮忙
docker network --help

# 查看已存在网络
docker network ls

# 创建自定义网络
docker network create <network_name>
# 移除指定网络
docker network rm <network_name>
# 查看网络的详细信息
docker network inspect <network_name>

(2)创建自定义网络

  • IPv4网络
docker network create --subnet=<ipv4_subnet_addr> <network_name>
  • IPv6网络
docker network create --subnet=<ipv6_subnet_addr> --ipv6 <network_name>

注:创建的默认虚拟网卡名为br-<network-hash>, 可以添加"-o com.docker.network.bridge.name=<br_name>"参数指定虚拟网卡名。

(3)指定网络和IP地址创建容器

  • IPv4网络
docker run -itd --ip <ipv4_address> --network <network_name> --name <container_name> <image_name>:<tag>
  • IPv6网络
docker run -itd --ip6 <ipv6_address> --network <network_name> --name <container_name> <image_name>:<tag>

此时创建的容器已被设置为指定ip地址,可以进入容器查看确认。

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ftswsfb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值