素槿
Published on 2025-08-22 / 3 Visits
0

docker日常操作

1. 从阿里云源安装docker

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

# 加入并更新用户组
sudo gpasswd -a $USER docker
newgrp docker

0. 设置aliyun镜像加速

没有此文件则创建。输入从阿里云注册的自己的镜像加速器

$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

1. 根据Dockerfile构建镜像

在Dockerfile所在目录执行, 建议为空目录。

$ docker build -t <image name> .

2. 创建/运行容器

创建使用 docker create

$ docker run -d --name <container name> <image name>
$ docker run -itd -p <host port>:<docker port> --name=<name> <image name> /bin/bash

3. 登录容器

登录运行中的容器。

$ docker exec -it <container name> bash

4. 查看容器的信息信息

$ docker inspect <container name>

5. 删除不在运行的容器和不用的镜像

$ docker system prune

6. 网络

查看网络模式

$ docker network list

创建网桥

$ docker network create --subnet=x.x.x.0/24 <Bridge Name>

删除网桥

docker network rm <Bridge Name>

指定IP

$ docker run -itd --network=<Bridge Name> --ip <IP> --name <dockerName> <imageName> bash

值得注意的是:网络段不要和主机网络段冲突,要不然会影响宿主机.

7. 一个自用Dockerfile

实现的主要需求有:

  • 能比较简单地设置操作系统版本
  • 比较简单地设置国内源
  • 可以安装ssh并进行设置,开启容器后就可以直接ssh连上
  • 添加了一个普通用户
FROM ubuntu:21.04
ARG VERSION=hirsute
ARG MIRRORS=http://mirrors.163.com

RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak \
	&& echo "deb $MIRRORS/ubuntu/ $VERSION main restricted universe multiverse" >/etc/apt/sources.list \
	&& echo "deb $MIRRORS/ubuntu/ $VERSION-security main restricted universe multiverse" >> /etc/apt/sources.list \
	&& echo "deb $MIRRORS/ubuntu/ $VERSION-updates main restricted universe multiverse" >> /etc/apt/sources.list \
	&& apt-get update && apt-get upgrade -y > /dev/null \
	&& apt-get install -y sudo vim openssh-server > /dev/null \
	\
	&& mkdir -p /var/run/sshd \
	&& mkdir -p /root/.ssh \
	&& sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config \
	&& sed -ri 's/UsePAM yes/UsePAM no/' /etc/ssh/sshd_config \
	&& /etc/init.d/ssh start \
	\
	&& apt-get autoclean && apt-get autoremove && apt-get clean > /dev/null \
	&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
	&& mkdir -p /root/code \
	&& echo 'root:root' | chpasswd \
	\
	&& useradd --create-home --no-log-init --shell /bin/bash ngx \
	&& adduser ngx sudo \
	&& echo 'ngx:1' | chpasswd

# USER ngx
# WORKDIR /home/ngx

EXPOSE 22
CMD [ "/usr/sbin/sshd", "-D" ]

如果使用的是HTTPS的源,则需要在换源前提前安装 apt-transport-httpsca-certificates

8.docker设置镜像存储路径

编辑文件 /lib/systemd/system/docker.service,编辑以 ExecStart开头的行,加入 --data-root /path, 其中path为自定义的路径。修改如下:

... ...
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root /path
... ...

然后关闭docker守护进程,将相关文件移动到设置好的位置,再重启docker守护进程:

# systemctl stop docker

# cp -r /var/lib/docker /path

# systemctl daemon-reload

# systemctl restart docker

9.设置vscode连接服务器中的容器

编辑文件 /lib/systemd/system/docker.service,编辑以 ExecStart开头的行,加上 -H tcp://0.0.0.0:8888,端口号可以设置为不冲突的其他值。

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:8888

修改保存后重启dockerd服务:

$ systemctl daemon-reload
$ service docker restart

vscode中安装Docker与Remote-Container插件,然后在设置中搜索 docker:host,将上面设置(tcp://0.0.0.0:8888)的填入设置项。

重启vscode,点击左面板上的docker图标,就可以显示服务器上的docker镜像和容器,并进行相应的操作。

10. 导出和导入镜像

# 导出,导入镜像
docker save -o save-name.tar image-name:tag

docker load -i save-name.tar


# 导出,导入容器
docker export -o save-name.tar container-name

docker import save-name.tar name:tag


# 提升为镜像
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]

12. 其他

note:以上操作匀在Ubuntu2004上进行。

ssh相关操作

$ ssh ngx@172.17.0.2
$ ssh-keygen -t rsa -C "your_email@example.com"
$ ssh-copy-id -i <identity_file> [-p <port>] user@ip