docker 
首先卸载旧版本
shell
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine安装基本环境 
shell
yum install -y yum-utilsshell
 # 默认使用 国外仓库,速度特别慢
 yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
 # 换成阿里云镜像
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposhell
# 更新yum索引
yum makecache fast
# 安装docker 引擎
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 安装完成后,启动,docker 服务,不然,无法使用
systemctl start docker使用 docker version 可以查看 docker 的一个版本信息,检测是否安装成功
启动 docker
shell
docker run hello-world
如果启动成功 hello word 会出现上面的信息
查看 docker 镜像包
shell
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   12 months ago   13.3kB卸载 docker 
卸载 Docker 引擎、CLI 和 Containerd 包 依赖环境
shell
yum remove docker-ce docker-ce-cli containerd.io删除 资源
shell
rm -rf /var/lib/dockerdocker 运行流程 
graph LR
A[方形] -->B(圆角)
    B --> C{条件a}
    C -->|a=1| D[结果1]
    C -->|a=2| E[结果2]
    F[横向流程图]st=>start: 下载镜像
on=>operation: content
cn=>condition: sure?
a=>end: end
st->on->a->cndocker 命令 
帮助命令 
shell
# 可以查看docker 的所有命令
docker --help
# 查看docker 镜像的详细信息
docker images
# 中间加上具体查看的东西,可以查看某个命令的参数
docker images --help
[root@localhost ~]# docker images -a
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   12 months ago   13.3kB
# REPOSITORY 仓库
# MAGE ID 镜像id
# CREATED 创建时间
# SIZE 镜像的大小更换镜像源 
参考 https://cr.console.aliyun.com/cn-zhangjiakou/instances/mirrors
阿里云

配置 镜像加速器,这样下载镜像才会更快
下载命令镜像 
shell
# mysql后面可以添加版本号,如果不加,默认下载最新版本
[root@localhost ~]# docker pull mysql
Using default tag: latest  # 默认使用最后一个分支,即最新版本
latest: Pulling from library/mysql
6ec7b7d162b2: Downloading  1.392MB/27.1MB
fedd960d3481: Download complete
7ab947313861: Download complete
64f92f19e638: Download complete
3e80b17bff96: Download complete
014e976799f9: Download complete
59ae84fee1b3: Download complete
ffe10de703ea: Download complete
657af6d90c83: Downloading  27.42MB/112.8MB
98bfb480322c: Download complete
6aa3859c4789: Download complete
1ed875d851ef: Download complete删除镜像 
shell
# 删除镜像!
docker rmi
# 删除指定id的镜像
docker rmi 指定id安装一个centos镜像
shell
docker pull centos新建容器并启动 
shell
docker run[可变参数] image
# 参数说明
--name="Name"  容器的名字,用来区分不同的容器
-d 				以后台方式运行
-it				使用交互模式运行,进入容器查看内容
-p				指定容器的端口 -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口 (常用)
	-p 容器端口
-p 				随机指定端口运行 centos 容器,相当于,拥有的 centos 环境

运行已存在容器 
shell
docker start 镜像id退出容器 
shell
exit  # 直接退出容器,并停止
ctrl+p+q  # 退出容器,不停止容器查看正在运行的容器 
shell
docker ps查看全部容器 
shell
docker ps -a删除容器 
shell
docker rm 容器id   # 删除指定的容器
docker rm -f      # 删除所有的容器启动和停止容器的操作 
shell
docker start 容器id    # 启动容器
docker restart 容器id  # 重启容器
docker stop 容器id	 # 停止当前正在运行的容器
docker kill 容器id	 # 强制停止容器启动时的一些坑:docker 容器,后台启动后,必须要有一个前台进程,docker 发现没有应用则会,杀掉容器
查看日志 
shell
docker logs -f -t --tail查看容器中的进程信息 
shell
dokcer top 容器id查看 容器的元数据
shell
docker inspect
[root@localhost ~]# docker inspect 300e315adb2f
[
    {
        "Id": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
        "RepoTags": [
            "centos:latest"
        ],
        "RepoDigests": [
            "centos@sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2020-12-08T00:22:53.076477777Z",
        "Container": "395e0bfa7301f73bc994efe15099ea56b8836c608dd32614ac5ae279976d33e4",
        "ContainerConfig": {
            "Hostname": "395e0bfa7301",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:6de05bdfbf9a9d403458d10de9e088b6d93d971dd5d48d18b4b6758f4554f451",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20201204",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "DockerVersion": "19.03.12",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:6de05bdfbf9a9d403458d10de9e088b6d93d971dd5d48d18b4b6758f4554f451",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20201204",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 209348104,
        "VirtualSize": 209348104,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/d95ff18581906b92928ee2a9972f3f0eae576847a5e                                                            cc223af24227627f04b9e/merged",
                "UpperDir": "/var/lib/docker/overlay2/d95ff18581906b92928ee2a9972f3f0eae576847a5ec                                                            c223af24227627f04b9e/diff",
                "WorkDir": "/var/lib/docker/overlay2/d95ff18581906b92928ee2a9972f3f0eae576847a5ecc                                                            223af24227627f04b9e/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]进入已经运行的容器 
shell
# 第一种方式
docker exec -it 容器id /bin/bash   # /bin/bash 这个是终端
# 第二种
docker attach 容器id
# 第一种方式,进入容器后,再开启一个新的终端,可以在里面操作(常用)
# 第二种,是进入正在执行的终端,不会启动新的程序复制容器里文件到主机 
shell
docker cp 容器id:容器路径 主机目录
[root@localhost ~]# docker cp 7421f5c1e569:home/test.java /home实例练习 
nginx 
1.首先下载 nginx 镜像,
shell
# docker pull nginx   # 默认下载最新版本
# 启动镜像
# docker
docker run -d --name nginx01 -p 3344:80 nginx
# 新建了一个容器 名字叫 nginx01 以后台运行的方式运行,使用容器的80端口,主机使用3344端口
# 我们可以通过访问3344 这个端口访问到这个nginx
docker run -it -p 8080:8080 nginx
以前台方式运行 ,主机端口8080,nginx 端口8080tomcat 
官方默认的镜像 tomcat 的 webapp 下是没有东西的,东西全部都在 webapps.dist 下
redis 
shell
docker pull redis
docker run -itd --name redis -p 6379:6379 redis进入客户端连接
shell
docker exec -it redis名字 redis-climysql 
拉取 mysql
shell
docker pull mysql:5.7用来存放一些文件信息和 mysql 数据
shell
mkdir -p /home/dockerdata/mysql/conf
mkdir -p /home/dockerdata/mysql/logs
mkdir -p /home/dockerdata/mysql/mysql创建配置文件
shell
cd /home/dockerdata/mysql/conf/
vi my.cnfshell
[mysqld]
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
symbolic-links=0
character-set-server=utf8
init_connect='SET NAMES utf8'
max_connections = 2000
max_user_connections = 1900
max_connect_errors = 100000
max_allowed_packet = 50M
lower_case_table_names=1
[mysqld]
skip-name-resolve
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONcharacter-set-server=utf8 init_connect='SET NAMES utf8'
这 2 句是设置 linux 的 mysql 5.7 中文编码问题
启动 mysql
shell
docker run  -p 3306:3306 --name mysql5.7 -v /home/dockerdata/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /home/dockerdata/mysql/logs:/logs -v /home/dockerdata/mysql/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7映射端口 3306 ,默认 root 密码为 root
注意 相关路径需要自己设置
rabbit mq 
shell
docker pull rabbitmq # (镜像未配有控制台)
docker pull rabbitmq:management # (镜像配有控制台)
docker run --name rabbitmq -d -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin  -p 15672:15672 -p 5672:5672 rabbitmq:managementfastdfs
sh
docker run -ti -d --name  trakcer -p 8888:8888 -v ~/fastdfs/tracker_data:/fastdfs/tracker/data --net=host season/fastdfs tracker
docker run -tid --name storage -p 8888:8888 -v ~/fastdfs/storage_data:/fastdfs/storage/data -v ~/fastdfs/store_path:/fastdfs/store_path --net=host -e TRACKER_SERVER:192.168.134.128:22122 -e GROUP_NAME=group1 season/fastdfs storage可视化(忘了做啥的了) 
shell
docker run -d -p 8088:9090 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainerdocker 镜像 
镜像是什么 
镜像是一种轻量级.可执行的独立软件包,用来打包软件的运行
和基于运行环境开发的软件,它包含运行某个软件所需要的所有环境,包括代码,运行时.库.环境变量和配置文件
如何得到镜像
- 从远程仓库下载
- 朋友拷贝给你
- 自己制作一个镜像 DockerFile
docker 镜像加载原理(需要填坑) 
UnionFS (联合文件系统)
我们下载的时候,看到的一层一层的就是这个 联合文件系统
Docker 镜像加载原理
提交镜像 
commit
shell
docker commit 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id  目标镜像名
docker commit -m="mytomcat" -a="ztf" 容器id 目标镜像名称:版本