笔记内容转载自AcWing的Linux基础课讲义,课程链接:AcWing Linux基础课。
Ubuntu 系统 Docker 官网安装教程:Docker Install Docs。
本文安装 Docker 所使用的 OS 版本为:Ubuntu 22.04 (LTS)。依次执行以下命令安装 Docker:
(1)更新 apt
:
sudo apt-get update
(2)允许 apt
通过 HTTPS 使用存储库:
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
(3)添加 Docker 的官方 GPG 密钥:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
(4)设置 repository
:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
(5)安装 Docker Engine,首先更新 apt
:
sudo apt-get update
(6)安装 Docker Engine
、containerd
、Docker Compose
:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
(7)检查版本:
docker -v
docker --version
(1)将当前用户添加到 docker
用户组
为了避免每次使用 docker
命令都需要加上 sudo
权限,可以将当前用户加入安装中自动创建的 docker
用户组(可以参考官方文档):
sudo usermod -aG docker $USER
执行完此操作后,需要退出服务器(即关闭系统),再重新登录回来,才可以省去 sudo
权限。
(2)镜像(images)
一个 Docker 中可以有很多镜像,镜像就相当于模板,每个镜像中又可以有很多容器。
用相同镜像生成的容器环境都一样,如果 Docker 安装在云服务器上,那么每个容器也就相当于是一个独立的云服务器。
迁移项目的时候即将容器先生成一个镜像,然后把镜像传到远程服务器上。
docker pull ubuntu:20.04
或 docker pull ubuntu:latest
:拉取一个镜像。docker images
:列出本地所有镜像。docker save -o ubuntu_latest.tar ubuntu:latest
:将镜像 ubuntu:latest
导出到本地文件 ubuntu_latest.tar
中,导出后记得给文件加上可读权限:chmod +r ubuntu_latest.tar
。docker image rm ubuntu:latest
或 docker rmi ubuntu:latest
:删除镜像 ubuntu:latest
。docker [container] commit CONTAINER IMAGE_NAME:TAG
:创建某个 container
的镜像,[]
表示 container
为可选字段。docker load -i ubuntu_latest
:将镜像 ubuntu:latest
从本地文件 ubuntu_latest.tar
中加载出来。(3)容器(container)
docker [container] create -it ubuntu:latest
:利用镜像 ubuntu:latest
创建一个容器。docker ps -a
:查看本地的所有容器,docker ps
为查看运行中的容器。docker [container] start CONTAINER
:启动容器,CONTAINER
可以是 ID 或 NAMES。docker [container] stop CONTAINER
:停止容器。docker [container] restart CONTAINER
:重启容器。docker [contaienr] run -itd ubuntu:latest
:创建并启动一个容器,可以加上参数 -p 20000:22
表示将容器的22端口映射到本地的20000端口,因为本地的22端口已经被占用了,且如果是在云服务器安装 Docker 还需要修改云服务器安全组配置,把20000端口放行。docker [container] attach CONTAINER
:进入容器。
Ctrl+p
,再按 Ctrl+q
可以挂起容器,即退出但不关闭容器。Ctrl+d
可以退出并关闭容器。docker [container] exec CONTAINER COMMAND
:在容器中执行 COMMAND
命令。docker [container] rm CONTAINER
:删除容器。docker container prune
:删除所有已停止的容器。docker export -o xxx.tar CONTAINER
:将容器导出到本地文件 xxx.tar
中。docker import xxx.tar image_name:tag
:将本地文件 xxx.tar
导入成镜像,并将镜像命名为 image_name:tag
。docker export/import
与 docker save/load
的区别:
export/import
会丢弃历史记录和元数据信息,仅保存容器当时的快照状态。save/load
会保存完整记录,体积更大。docker top CONTAINER
:查看某个容器内的所有进程。docker stats
:查看所有容器的统计信息,包括 CPU、内存、存储、网络等信息。docker cp xxx CONTAINER:xxx
或 docker cp CONTAINER:xxx xxx
:在本地和容器间复制文件。docker rename NAMES1 NAMES2
:将 NAMES1
容器重命名为 NAMES2
。docker update CONTAINER --memory 500MB
:修改容器限制,更多修改内容可以在官网查找。passwd
可以设置 root
密码。(4)云服务器配置示例
首先在 AC Terminal 中操作:
scp /var/lib/acwing/docker/images/docker_lesson_1_0.tar server_name: # 将镜像上传到自己租的云端服务器
ssh server_name # 登录自己的云端服务器
docker load -i docker_lesson_1_0.tar # 将镜像加载到本地
docker run -p 20000:22 --name my_docker_server -itd docker_lesson:1.0 # 创建并运行docker_lesson:1.0镜像的容器
docker attach my_docker_server # 进入创建的docker容器
passwd # 设置root密码
然后去云平台控制台中修改安全组配置,放行端口:20000。
返回 AC Terminal,即可通过 SSH 登录自己的 Docker 容器:
ssh root@xxx.xxx.xxx.xxx -p 20000 # 将xxx.xxx.xxx.xxx替换成自己租的服务器的IP地址
创建 acs
用户:
adduser acs # 创建用户acs
usermod -aG sudo acs # 给用户acs分配sudo权限
最后可以配置 Docker 容器的别名和免密登录。
Tips:如果 apt-get
下载软件速度较慢,可以参考清华大学开源软件镜像站中的内容,修改软件源。
以阿里云 ECS 服务器为例,购买云服务器后第一步先重置示例的密码:
安全组控制服务器的哪些端口是可以访问的:
注意如果是学生免费领取的 ECS 体验云服务器在 SSH 远程登录时可能会遇到报错:Permission denied (publickey)
,我们在阿里云控制台中点击远程连接,然后选择 VNC 远程连接(第一次登录需要重置密码):
登录到自己的根用户,编辑服务器上的 sshd_config
文件:vi /etc/ssh/sshd_config
,翻到最下面找到 PasswordAuthentication
,将其改为 yes
即可。
由于根用户权限太大,一般来说我们需要创建一个用户,给其分配 sudo
权限,首先可以使用以下命令查看所有用户的详细信息,其中包含七个字段,每个字段之间用冒号分隔,分别为用户名、密码、用户 ID、群组 ID、用户信息、家目录、Shell类型:
cat /etc/passwd
显示如下
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
......
创建一个用户并分配权限:
adduser asanosaki
usermod -aG sudo asanosaki
删除用户命令:
userdel -r asanosaki
首先更新一下 apt
:
sudo apt-get update
安装 Tmux 和 Git:
sudo apt-get install tmux
sudo apt-get install git
然后可以将本地的配置文件(如 Vim、Tmux等)上传到云服务器上即可找到自己熟悉的感觉:
scp .bashrc .vimrc .tmux.conf asanosaki@<云服务器IP地址>: