原创

Docker安装教程与使用案例以及相关命令


一、Docker 安装教程

Ubuntu(使用 apt-get 进行安装)

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# step 2: 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Step 3: 写入软件源信息
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
# Step 4: 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

CentOS (使用 yum 进行安装)

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils

# Step 2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Step 4: 开启Docker服务
sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

安装校验

root@iZbp12adskpuoxodbkqzjfZ:$ docker version
Client:
 Version:      17.03.0-ce
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.0-ce
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64
 Experimental: false

将 Docker 服务设置为在启动时运行,输入命令:

sudo systemctl start docker

sudo systemctl enable docker

卸载Docker

  1. 卸载docker以及依赖
apt-get remove docker docker-engine docker.io docker-ce containerd runc

二、Docker常用命令

docker 基础命令

启动docker

systemctl start docker

关闭docker

systemctl stop docker

重启docker

systemctl restart docker

docker 服务启动启动

# 开启 docker 自启动
systemctl enable docker

# 关闭 docker 自启动
systemctl disable docker

docker 容器自动启动

# 开启容器自启动
docker update --restart=always 【容器名】
例如:docker update --restart=always tracker


# 关闭容器自启动
docker update --restart=no【容器名】
例如:docker update --restart=no tracker

##### 相关配置解析
no:
    不要自动重启容器。(默认)

on-failure: 
    如果容器由于错误而退出,则重新启动容器,该错误表现为非零退出代码。

always:
    如果容器停止,请务必重启容器。如果手动停止,则仅在Docker守护程序重新启动或手动重新启动容器本身时才重新启动。(参见重启政策详情中列出的第二个项目)

unless-stopped:
    类似于always,除了当容器停止(手动或其他方式)时,即使在Docker守护程序重新启动后也不会重新启动容器。

1 镜像相关

1.1 查看镜像列表

sudo docker images

1.2 镜像搜索

比如搜索 ubuntu 基础镜像

sudo docker search ubuntu

可输出官方的镜像名称,以及 star 数量,选择一个需要的镜像下拉即可

img

1.3 下载镜像

sudo docker pull 镜像名



sudo docker pull 镜像名:Tag

1.4 删除镜像

sudo docker rmi -f 镜像名/镜像ID

1.5 保存镜像

将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像

docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字

1.6 加载镜像

任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像

docker load -i 镜像保存文件位置

2 容器相关

2.1 容器列表

sudo docker ps


sudo docker ps -a # 查看所有容器 -----包含正在运行 和已停止的

2.2 创建容器

docker run -it -d --name 要取的别名 -p 宿主机端口:容器端口 -v 宿主机文件存储位置:容器内文件位置 镜像名:Tag /bin/bash 

参数含义:

  • -it 表示 与容器进行交互式启动
  • -d 表示可后台运行容器 (守护式运行)
  • --name 给要运行的容器 起的名字
  • /bin/bash 交互路径
  • -p 将容器的端口映射到宿主机上,通过宿主机访问内部端口
  • -v 将容器内的指定文件夹挂载到宿主机对应位置

2.3 停止容器

sudo docker stop 容器名/容器ID

2.4 删除容器

#删除一个容器


docker rm -f 容器名/容器ID


#删除多个容器 空格隔开要删除的容器名或容器ID


docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID


#删除全部容器


docker rm -f $(docker ps -aq)

2.5 进入容器

进入正在运行中的容器

docker exec -it [容器ID/名字] bash

2.6 查看容器详细信息

docker inspect 容器名

2.7 显示Docker容器和物理主机挂载目录信息

docker inspect 容器ID/容器名
docker inspect 容器ID | grep Mounts -A 50

如下图 source 属性值 img

docker run 命令

作用

创建一个新的容器并运行一个命令

语法格式

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 备注:其实跟 docker create 一样的语法格式,只不过可以运行容器甚至进入容器内部

  • COMMAND :需要在容器内执行的命令

docker run 执行流程

  • 首先在指定镜像上创建一个可写的容器层
  • 然后使用指定的命令(COMMAND)启动它
  • docker run 相当于执行了两个 API:/containers/create、/containers/(id)/start

options 说明

option	作用
-i	以交互模式运行容器,通常与 -t 同时使用
-t	启动容器后,为容器分配一个命令行,通常与 -i 同时使用
-v	目录映射,容器目录挂载到宿主机目录,格式: <host目录>:<容器目录>
-d	守护进程,后台运行该容器
-p	指定端口映射,格式:主机(宿主)端口:容器端口
-P	随机端口映射,容器内部端口随机映射到主机的端口(49153起始 49153到65535)
-u	以什么用户身份创建容器
–name “nginx-lb”	容器名字
-m, --memory bytes	设置容器使用内存最大值
-h, --hostname string	指定容器的 host name
–dns 8.8.8.8	指定容器 dns 服务器
-e username=“ritchie”	设置环境变量
–restart Docker	重启后,容器是否自动重启
–privileged	容器内是否使用真正的 root 权限

实际例子

例一

使用镜像 tomcat:7 ,容器命名为 tomcat7

docker run --name tomcat7 tomcat:7
#这里出现INFO:Server startup in ...de 时候说明镜像拉取创建完毕可以Ctrl+c退出因为没有把启动日志放到后台

在这里插入图片描述

img

这样运行,会直接将容器运行日志打印出来,所以一般都需要加 -d,否则无法继续敲其他命令

docker ps 看看容器

在这里插入图片描述

其实打印的日志就是 catalina.sh run 命令运行之后的日志

例二

使用镜像 tomcat:7 以后台模式启动一个容器 容器名字自定义为 tomcat7

docker run -d --name tomcat7 tomcat:7

在这里插入图片描述

创建容器之后还能执行其他命令,这样方便很多

例三

使用镜像 tomcat:7 以后台模式启动一个容器 将容器的 8080 端口映射到主机的随机端口 容器名字自定义为 tomcat666

docker run -d -P --name tomcat666 tomcat:7

在这里插入图片描述

例四

使用镜像 tomcat:7 以后台模式启动一个容器 将容器的 8080 端口映射到主机的 9999 端口 容器名字自定义为 tomcat7

docker run -d -p 9999:8080 --name tomcat7 tomcat:7

可以看到 PORTS 一列,主机的 9999 端口指向了容器的 8080 端口

在这里插入图片描述

例五

使用镜像 tomcat:7 以后台模式启动一个容器 将容器的 8080 端口映射到主机的 9999 端口 容器名字自定义为 tomcat7 主机的目录 /usr/local/tomcat/webapps 映射到容器的 /usr/local/tomcat/webapps 以后直接在主机的 webapps 目录上传 war 包,就能在浏览器访问对应的项目

docker run -d -p 9999:8080 -i --name tomcat7 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7
1

例六

使用镜像 tomcat:7 以后台模式启动一个容器 将容器的 8080 端口映射到主机的 111.20.72.43:8888 端口 容器名字自定义为 tomcat77 主机的目录 /usr/local/tomcat/webapp 映射到容器 /usr/local/tomcat/webapps 启动容器后,在容器内执行 bash 命令 注意:这里不加 -it 的话,容器是无法再启动的,加上才能启动容器并执行 bash 命令

docker run -d -p 111.20.72.43:8888:8080 -v /usr/local/webapps:/usr/local/webapps -it --name tomcat77 tomcat:7 bash

例七

容器 8080 端口映射到主机的 1111 端口 -it以交互模式启动一个容器,在容器内执行 bash 命令 注意:如果这里加了 -d 参数,则不会进入容器的 CLI 界面;如果不加 bash 命令,则会执行 tomcat 容器本身自动会执行的命令( catalina.sh run ),也会进不了 CLI 界面,因为会打印一堆运行日志

docker run -it -p 1111:8080 tomcat:7 bash

不加 bash的执行结果

在这里插入图片描述

加 bash的执行结果 在这里插入图片描述

顺利进入容器的 CLI 界面,此时再去运行服务也是可以的

例八

以 root 权限创建容器,当进入容器之后,拥有 root 权限去执行命令

docker run -d --name jenkin2 --privileged=true jenkins/jenkins

在这里插入图片描述

虽然是拥有了 root 权限,但并不一定是 root 用户身份,所以最好加 -uroot 指定 root 用户身份

不加 --privileged 的小例子

在这里插入图片描述

即使加了 -uroot ,指定了 root 用户身份,但并不是真正拥有 root 权限

总结

-uroot:是给了 root 用户身份,但并没有真正的 root 权限 --privileged:真正让当前用户有了 root 权限 若想要最高的权限,两者可以结合使用

例九

该容器在 Docker 重启后会自动启动无需手动启动

docker run -d --name jenkins2 --restart always jenkins/jenkins

创建了两个容器:jenkins2、jenkins3 重启 docker 服务 再次查看正在运行的容器,只有 jenkins2

退出容器

exit         #容器直接退出
ctrl +P +Q  #容器不停止退出     ---注意:这个很有用的操作
教程