NotePublic/Software/Applications/Docker/Docker_安装和使用.md

3.1 KiB
Raw Blame History

Docker 安装和使用

安装

# Ubuntu
apt-get install docker.io
# Arch Linux/Manjaro
pacman -S docker

干掉讨厌的 sudo

# 如果还没有 docker group 就添加一个
sudo groupadd docker
# 将自己的登录名(${USER} )加入该 group 内。然后退出并重新登录就生效啦
sudo gpasswd -a ${USER} docker
# 重启 docker 服务
sudo systemctl restart docker
# 切换当前会话到新 group 或者重启 X 会话
# 注意,这一步是必须的,否则因为 groups 命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以 docker images 执行时同样有错。
newgrp - docker
OR
pkill X

基本使用

Docker 的主要管理对象是镜像和容器,镜像是静态对象,保存了分层的用户数据;而容器是动态对象,可以看作镜像的运行状态,容器主要包容了 root fs。二者的关系如同程序文件与进程的关系。必须使用镜像来创建容器一旦 Docker 加载并运行了谋镜像,就为之创建一个与之对应的容器,容器至少有 stop 和 run 两个状态。使用 run 命令通过镜像创建容器后,该容器处于 run 状态,使用 exit 命令脱离容器后,容器处于 stop 状态。可以使用 start 命令将处于 stop 状态的容器再次运行起来。

如果每次都使用 run 命令从同一个镜像创建容器,会发现两个容器是完全一样的,因为他们都有相同的起始点。容器使用后,会保存当前的使用状态,但如果希望将其当前状态保存成镜像,可以使用 commit 命令。

  • image name 为 <repository>:<tag> 这种形式。 *

以下是使用 Docker 的一些基础命令:

# 从 https://hub.docker.com 拉取镜像
docker pull ubuntu:18.04
# 运行谋镜像并为之创建容器
docker run <image name/id>
# 运行谋镜像,为之创建容器,将宿主机端口影射到容器端口,并将宿主机的谋目录挂载到容器的对应目录下
docker run -it -p <host ip:port><container port> -v <host dir>:<container dir> <image name/id> /bin/bash
# 查看正在运行的容器
docker ps
# 提交针对谋容器的修改,将其保存为镜像
docker commit <container id> <repository>:<tag>
# 退出容器:在容器的 shell 中直接
exit
# 运行谋已存在的容器
docker start <container id>
docker attach <container id>
# 在谋已运行的容器中执行命令
docker exec -it <container name/id> <cmd and args>
# 迁移镜像
docker save -o <tar file> <image name/id>
docker load -i <tar file>
# 迁移容器
docker export -o <tar file> <container name/id>
docker import <tar file> <repository>:<tag>

如果想退出容器但又不想让容器停止,使用 ctrl+p+q 即可。

容器操作

# 获得容器信息
docker container ls -a
# 获得容器id
docker container ls -a  -p
# 停止容器
docker container stop <container id>
# 删除容器
docker container rm  <container id>

镜像操作

# 获得镜像信息
docker image ls -a
# 获得镜像id
docker image ls -a  -p
# 重命名镜像
docker tag <image name/id> <repository>:<tag>
# 删除镜像
docker image rm  <image name/id>