参考帖子:docker大神贴
借鉴了别人的帖子,整理成对自己有用的信息。
目录:
第一章:介绍docker
第二章:现场安装
第三章:常用指令
第四章:mysql部署
第五章:redis部署
初理解:我们要把台式机的应用部署到笔记本上,我们可能选择用QQ发过去或者用U盘拷过去,docker就标准化了这个过程,我们只需在台式机上执行一个docker命令,把鲸鱼派过来,把程序送到超级码头去,再在笔记本上执行一个docker命令,然后由鲸鱼把程序从超级码头送到笔记本上去.
一、走进docker
镜像就是上面说的集装箱,仓库就是超级码头,容器就是我们运行程序的地方.docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器.
build:构建,就是构建镜像.
ship:运输,运输镜像,从仓库和主机运输.
run:运行的镜像就是一个容器.
build,ship,run和镜像,仓库,容器是一一对应的.
1.1 镜像
什么是镜像?
maybe: 一个应用程序文件? or 一个运行环境文件?
原理:
举一个例子:有两个文件夹:wenjianjia1,wenjianjia2。
分别有一下信息。
wenjianjia1: wenjia1, wenjian2, wenjian3
wenjianjia2: wenjia4, wenjian5
这时候有一个牛逼的文件夹,可以同时存放这两个文件夹的文件
wenjianjia: wenjia1, wenjian2, wenjian3, wenjia4, wenjian5
我们称之为联合文件系统。
docker正式基于此来。
放大来看,最底层是文件系统,依次网上是相关软件,在网上是自己写的程序。
目录结构 |
---|
自己写的代码 |
相关软件 |
操作系统 |
如果我们会把上面三层当成一层,看成同一个目录。docker的这种文件系统被称之为镜像.
但镜像每一层只允许是只读的。
1.2 容器
把他理解成虚拟机,但是最下面的n层都是只读的,只有上面一层是可写的。
1.3 仓库
我们的镜像是要在其它机器上运行,如何进行传输呢?
这就用到了docker仓库,我们要先把我们的镜像传到docker仓库中,再由目的地把docker仓库拉过去,这就完成了这样的一次传输过程.
二、安装docker
tips:使用的是ubuntu 18.04.6
可以使用
lsb_release -a
查看版本信息
2.1 更新软件包
sudo apt update
sudo apt upgrade
2.2 安装docker依赖
apt-get install ca-certificates curl gnupg lsb-release
2.3 添加Docker官方密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
2.4 添加软件源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
2.5 安装docker
apt-get install docker-ce docker-ce-cli containerd.io
2.6* 配置用户组(可选)
由于我们要使用sudo才能运行Docker命令,我们只需要将用户添加到docker组,这样以后就可以不用每次都sudo了
sudo usermod -aG docker $USER
2.7 运行docker
# 启动
systemctl start docker
# 安装工具
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 重启
service docker restart
# 验证是否成功
sudo docker run hello-world
三、docker基本命令
3.1 docker 基本命令
①远程仓库拉取镜像到本地(说白了就是自己本地仓库没有从远程仓库拉一个下来)
docker pull [options] NAME[:TAG]
name是拉取镜像的名称,:TAG表示是可选的,如果不选表明时latest,如果选择表明是指定版本的.
options是拉去的一些参数.
当不加请求地址的时候回去docker的官网拉取镜像.
②可以使用这个命令来列出本地的镜像、移除镜像、创建镜像等操作(就是看你本地仓库里有啥子)。
docker images [options] [REPOSITORY[:TAG]]
# 使用实例
docker images ls
options是选项,后面是指定镜像的名称.这个用的不多,可能当本地镜像非常多的时候要指定查看某一个镜像.
③用于在容器中运行一个特定的镜像(运行镜像)
docker run [options] IMAGE[:TAG] [COMMAND] [ARG..]
# 实例
docker run -d --name mysql -p 3306:3306 -v mysql_data:/var/lib/mysql -v mysql_conf:/etc/mysql --restart=always --privileged=true -e MYSQL_ROOT_PASSWORD=1234 mysql:8.0.30
IMAGE是镜像的名字
COMMAND是运行起来的时候要执行什么命令.
ARG表示这条命令运行需要的参数.
3.2 docker运行镜像流程
docker pull
docker run
四、docker安装mysql
4.1 直接docker pull 拉去镜像, 创建容器
# 拉取镜像
docker pull mysql:8.0.30
# 创建容器
docker run -d --name mysql -p 3306:3306 -v mysql_data:/var/lib/mysql -v mysql_conf:/etc/mysql --restart=always --privileged=true -e MYSQL_ROOT_PASSWORD=1234 mysql:8.0.30
# 查看运行状态
docker ps
4.2 修改加密规则
起因:我有个gay舍友连不到我的mysql,由于他的是mysql8.
docker安装完成mysql8,如果使用sqlyog或者navite连接,需要修改密码加密规则,因为低版本客户端工具不支持mysql8最新的加密规则。如果使用客户端连接,需要修改:
# 进入容器内
docker exec -it mysql /bin/bash
# 登录你的 MySQL 数据库,然后 执行这条SQL
mysql -uroot -p
# 修改加密规则
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
五、docker安装redis
5.1 docker拉取镜像部署
#1 拉取镜像
docker pull redis:7.0.10
#2 未redis添加配置文件
# 在宿主机的 /var/lib/docker/volumes/redis-config/_data/目录下创建一个redis的配置文件,
vim redis.conf
# 内容如下所示
#开启持久化
appendonly yes
port 6379
# requirepass 1234
bind 0.0.0.0
#3 如果/var/lib/docker/volumes没有redis-config,创建数据卷
docker volume create redis-config
#4 创建容器
docker run -d -p 6379:6379 --restart=always \
-v redis-config:/etc/redis/config \
-v redis-data:/data \
--name redis redis \
redis-server /etc/redis/config/redis.conf
#5 查看是否成功
docker ps
# 一些常用的命令总结
docker ps # 查看运行的容器
docker rm con_id # 根据容器的id删除容器
docker stop con_id # 根据容器的id停止id