卸载Docker
# 较旧版本的Docker被称为docker或docker-engine。
# 如果已安装这些,请卸载它们以及相关的依赖项。
# 卸载Docker包
$ sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
# 删除图像、容器、卷或自定义配置文件[]
$ sudo rm -rf /var/lib/docker
$ sudo rm -rf /var/run/docker
sudo 命令报错处理
# 切换成root用户
$ su
# 输入root登录密码
# 更改文件权限为可读写
chmod u+w /etc/sudoers
# 使用Vi编辑sudoers文件
vi /etc/sudoers
# 找到root ALL=(ALL) ALL这一行在下面后按i键进入编辑模式
# 添加下面这一行,lichee是不能执行sudo用户的用户名
lichee ALL=(ALL) ALL
# 按Esc键退出编辑模式,输入':wq'保存并推出
# 将文件改回只读文件
chmod u-w /etc/sudoers
# 切换成lichee用户
su lichee
安装Docker CE
# 检查linux内核版本[Linux Kernel 3.10+]
$ uname -r
# 检查DeviceMapper
$ ls -l /sys/class/misc/device-mapper
# 安装yum-utils依赖包提供了yum-config-manager 效用、device-mapper-persistent-data和lvm2由需要 devicemapper存储驱动程序
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# [必须]设置stable存储库
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# [可选]其他存储库(默认禁用状态)
# [可选]edge存储库
# [可选]edge存储库启用
$ sudo yum-config-manager --enable docker-ce-edge
# [可选]edge存储库禁用
$ sudo yum-config-manager --disable docker-ce-edge
# [可选]test存储库
# [可选]test存储库启用
$ sudo yum-config-manager --enable docker-ce-test
# [可选]test存储库禁用
$ sudo yum-config-manager --disable docker-ce-test
# 安装DOCKER CE[一般安装最新稳定版本]
$ sudo yum install -y docker-ce
# [可选]安装特定[*.el7.centos]版本(el后面跟的数字是centos版本)
# [可选]查看库里的版本列表
$ yum list docker-ce --showduplicates | sort -r
# [可选]安装特定版本
# [可选]$ sudo yum install -y docker-ce-<VERSION STRING>
$ sudo yum install -y docker-ce-18.03.1.ce-1.el7.centos
# 启动Docker
$ sudo systemctl start docker
# 停止Docker
$ sudo systemctl stop docker
# 开启开机启动
$ sudo systemctl enable docker
# 禁用开机启动
$ sudo systemctl disable docker
安装后的人性化操作
非root用户管理docker
# 查询docker用户组是否存在[存在跳过创建]
$ cat /etc/group | grep docker
# 创建docker用户组
$ sudo groupadd docker
# 将用户lichee添加docker用户组
# $ sudo usermod -aG docker $(USER)
$ sudo usermod -aG docker lichee
# 重启生效
$ sudo reboot
linux拓展
# 添加用户
$ sudo useradd $(USER)
# 修改密码
$ sudo passwd $(USER)
# 创建用户组
sudo groupadd $(USERGROUP)
# 将用户添加至某用户组
$ sudo usermod -aG $(USERGROUP) $(USER)
# 将用户添移出某用户组
$ sudo gpasswd -d $(USER) $(USERGROUP)
# 查看用户所属组
$ groups $(USER)
# 查看用户所属组
$ id $(USER)
# 查看防火墙状态
$ sudo systemctl status firewalld
# 打开防火墙
$ sudo systemctl start firewalld
# 关闭防火墙
$ sudo systemctl stop firewalld
# 启用防火墙
$ sudo systemctl enable firewalld
# 禁用防火墙
$ sudo systemctl disable firewalld
# 禁用SELinux 修改SELinux=disabled
$ sudo vi /etc/selinux/config
# 启用SELinux 修改SELinux=permissive
$ sudo vi /etc/selinux/config
加速设置
# [推荐]自动利用脚本配置
# $ sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s [协议://加速地址]
$ sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s $(url)
# [可选]手动写入配置文件
$ sudo vi /etc/docker/daemon.json
# 输入配置{"registry-mirrors": ["$(url)"]}
# 在下列地址源选择一个代替$(url)
# 地址1:https://463pjc93.mirror.aliyuncs.com
# 地址2:https://registry.docker-cn.com
# 地址3:https://hub-mirror.c.163.com
# 重新加载配置文件
$ sudo systemctl daemon-reload
# 重新启动docker
$ sudo systemctl restart docker.service
基本命令
# 下载Image镜像
# $ sudo docker pull IMAGE
# 下载Ubuntu镜像
$ sudo docker pull ubuntu
# 输出'Hello world'
$ sudo docker run ubuntu echo 'Hello world'
# 交互式容器[-i 人机交互 -t 分配终端]
# $ sudo docker run --name $name -i -t Image /bin/bash
# 运行名为test的容器
$ sudo docker run --name test -i -t ubuntu /bin/bash
# 查看所有容器
# $ sudo docker ps [-a]
$ sudo docker ps -a
# 查看最新容器
# $ sudo docker ps [-l]
$ sudo docker ps -l
# 查看容器配置
# $ sudo docker inspect CONTAINER/NAMES
$ sudo docker inspect efd7c5463237
# 运行已经停止的容器
# $ sudo docker start [-i] CONTAINER/NAMES
$ sudo docker start -i test
# 停止已经运行的容器
# $ sudo docker stop [-i] CONTAINER/NAMES
$ sudo docker stop -i test
# 停止已经运行的容器
# $ sudo docker stop [-i] CONTAINER/NAMES
$ sudo docker stop -i test
# 删除已经停止的容器
# $ sudo docker rm CONTAINER
$ sudo docker rm efd7c5463237
# 守护式容器[Ctrl+P Ctrl+Q后台运行]
# 运行已经停止的容器
# $ sudo docker start [-i] CONTAINER/NAMES
$ sudo docker start -i test
# 查看后台运行的容器
# $ sudo docker ps
$ sudo docker ps
# 回到刚才后台运行的容器
# $ sudo docker attach CONTAINER/NAMES
$ sudo docker attach test
# 退出当前容器 [exits]
# 启动守护式容器
# $ sudo docker run -d --name=$name Image
# 执行shell脚本 返回循环输出hello world
$ sudo docker run -d --name test ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
# 查看日志
# $ sudo docker logs [-f] [-t] [--tail] $no CONTAINER ID/NAMES
# [-f]跟踪[-t]时间戳[--tail] 数量 数量0最新1行 数量5最新5行
$ sudo docker logs -t -f --tail 5 test
# 运行中的容器的进程
# $ sudo docker top CONTAINER ID/NAMES
$ sudo docker top test
# 在运行中容器执行新的命令
# $ sudo docker exec [-d] [-i] [-t] CONTAINER ID/NAMES
$ sudo docker exec -i -t test /bin/bash
# 停止运行中的容器[正常式停止]
# $ sudo docker stop CONTAINER ID/NAMES
$ sudo docker stop test
# 杀死运行中的容器[非正常停止]
# $ sudo docker kill CONTAINER ID/NAMES
$ sudo docker kill test
# 容器端口映射
# $ sudo docker run [-P] [-p] Image
# [-P]所有端口都映射
$ sudo docker run --name=test -i -t -P ubuntu /bin/bash
# [-p]指定端口映射
$ sudo docker run --name=test -i -t -p 80 ubuntu /bin/bash
# [-p]指定端口映射
$ sudo docker run --name=test -i -t -p 8080:80 ubuntu /bin/bash
# [-p]指定端口映射
$ sudo docker run --name=test -i -t -p 0.0.0.0:80 ubuntu /bin/bash
# [-p]指定端口映射
$ sudo docker run --name=test -i -t -p 0.0.0.0:8080:80 ubuntu /bin/bash
# 查看docker工作目录 docker root dir: /var/lib/docker/
$ sudo docker info
# 列出镜像
# $ sudo docker images [optsions] [repository]
# 不加参数查询
$ sudo docker images
# 列出镜像完整唯一id
# [--no-trunc=false]id不截断
# $ sudo docker images --no-trunc
$ sudo docker images --no-trunc
# 列出所有的镜像
# [-a,--all=false]显示所有
# $ sudo docker images -a
$ sudo docker images -a
# 列出所有镜像唯一ID
# [-q,--quiet=false]显示镜像唯一id
# $ sudo docker images -q
$ sudo docker images -q
# $ sudo docker images [repository]
$ sudo docker images ubuntu
# 查看镜像
# $ sudo docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
# 按镜像名和版本查询
# $ sudo docker inspect IMAGE:TAG
$ sudo docker inspect ubuntu:latest
# 删除镜像
# $ sudo docker rmi [OPTIONS] IMAGE [IMAGE...]
# [-f,-force=false]强制删除 [--no-prune=false]保留父镜像
# 删除多个镜像
# $ sudo docker rmi IMAGE1:TAG1 IMAGE3:TAG2
$ sudo docker rmi ubuntu:latest centos:latest
# 删除某个仓库里面所有镜像 [前提是当前镜像没有生成容器]
# 停止已经运行的容器
# $ sudo docker stop [-i] CONTAINER/NAMES
$ sudo docker stop -i test
# 删除已经停止的容器
# $ sudo docker rm CONTAINER
$ sudo docker rm efd7c5463237
# 删除当前仓库所有镜像
# $ sudo docker rmi $(docker images CONTAINER -q)
$ sudo docker rmi $(docker images centos -q)
# 搜索镜像[最多返回25个结果]
# $ sudo docker search [OPTIONS] TERM
# [--automated=false]显示自动化构建的镜像
# [--no-trunc=false]不截断的形式显示
# [-s,--stars=0]显示结果的最低星级
# $ sudo docker search --filter=stars=$no TERM
$ sudo docker search --filter=stars=3 centos
# 拉取镜像
# $ sudo docker pull [OPTINS] NAME[:TAG]
# [-a,--all-tags=false]下载所有镜像
# $ sudo docker pull -a image
$ sudo docker pull -a ubuntu
# 推送镜像[因docker Hub在国外,对国内支持不太好,这里选用阿里云]
# 登录阿里云仓库
$ sudo docker login --username=zouit.top@qq.com registry.cn-hongkong.aliyuncs.com
# 重名镜像
# $ sudo docker tag [ImageId] registry.cn-hongkong.aliyuncs.com/lichee/lichee:[镜像版本号]
$ sudo docker tag [ImageId] registry.cn-hongkong.aliyuncs.com/lichee/lichee:[镜像版本号]
# 推送镜像
# $ sudo docker push registry.cn-hongkong.aliyuncs.com/lichee/lichee:[镜像版本号]
# $ sudo docker push NAME[:TAG]
$ sudo docker push
# 构建镜像
# 通过容器构建
# $ sudo docker commit [OPTINONS] CONTAINER [REPOSITORY[:TAG]]
# [-a,--author string]作者信息 [-m,--message string]容器信息 [-p,--pause]运行中也能构建
$ sudo docker commit -a 'lichee' -m 'n80' webtest nginx/nginx01
# 通过dockerfile文件构建
# 创建放置dockerfile文件的文件夹
# $ mkdir -p dockerfile/
$ mkdir -p dockerfile/
# $ sudo vi dockerfile/Dockerfile
# $ sudo docker build [OPTIONS] PATH |URL|
# [-t,--tag='']指出构建后的名字
$ sudo docker build -t='n80' dockerfile/
# Dockerfile文件
from ubuntu:latest
maintainer 'lichee'
run apt-get update
run apt-get install -y nginx
# 指定暴露端口[一般运行时指定]
expose 80
案例测试
# 安装Nginx并局域网内访问
# 新启动一个容器
# $ sudo docker run -i -t --name webtest -p 80:80 ubuntu /bin/bash
$ sudo docker run -i -t --name webtest -p 80:80 ubuntu /bin/bash
# 升级 [apt-get update]
# 安装nginx [apt-get install -y nginx]
# 查找nginx [whereis nginx]
# 运行nginx [nginx]
# 查看当前进程 [ps -ef]
# 后台运行 [Ctrl+P Ctrl+Q]
# 查看正在的容器
# $ sudo docker ps
$ sudo docker ps
# 查看端口映射
# $ sudo docker port CONTAINER ID/NAMES
$ sudo docker port webtest
# 关闭之后重新启动nginx
# $ sudo docker exec nginx
$ sudo docker exec nginx