# Docker 安装和使用 ## 安装 ```sh # Ubuntu apt-get install docker.io # Arch Linux/Manjaro pacman -S docker ``` ## 干掉讨厌的 sudo ```sh # 如果还没有 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 为 \:\ 这种形式。 * 以下是使用 Docker 的一些基础命令: ```sh # 从 https://hub.docker.com 拉取镜像 docker pull ubuntu:18.04 # 运行谋镜像并为之创建容器 docker run # 运行谋镜像,为之创建容器,将宿主机端口影射到容器端口,并将宿主机的谋目录挂载到容器的对应目录下 docker run -it -p -v : /bin/bash # 查看正在运行的容器 docker ps # 提交针对谋容器的修改,将其保存为镜像 docker commit : # 退出容器:在容器的 shell 中直接 exit # 运行谋已存在的容器 docker start docker attach # 在谋已运行的容器中执行命令 docker exec -it # 迁移镜像 docker save -o docker load -i # 迁移容器 docker export -o docker import : ``` 如果想退出容器但又不想让容器停止,使用 ctrl+p+q 即可。 ### 容器操作 ```sh # 获得容器信息 docker container ls -a # 获得容器id docker container ls -a -p # 停止容器 docker container stop # 删除容器 docker container rm ``` ### 镜像操作 ```sh # 获得镜像信息 docker image ls -a # 获得镜像id docker image ls -a -p # 重命名镜像 docker tag : # 删除镜像 docker image rm ```