一、docker背景及作用
参考https://blog.youkuaiyun.com/weixin_43935927/article/details/122397582
二、docker名词
镜像(image):当写好了项目,则将项目+环境一起打包生成镜像;
容器(container):由镜像生成,启动容器后即包含了项目的环境,和项目,即可正常运行;
仓库(repository):将镜像存储到仓库
三、docker安装
3.1环境准备
ubuntu20.04
文档链接:https://docs.docker.com/engine/install/ubuntu/
3.2 安装及卸载
docker官网说的安装分两种,一种是通过仓库存储的docker包进行安装,另一种是通过下载指定包进行安装。这里主要记录第一种通过仓库进行安装:
3.2.1 docker安装
#1、卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
#2、更新apt
sudo apt-get update
#3、安装docker相关依赖
sudo apt-get install ca-certificates curl gnupg lsb-release
#4、添加docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
#5、设置仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#6、安装docker引擎
#这里也可以查看可安装的版本引擎
apt-cache madison docker-ce
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin
#以下是默认安装最新版本docker引擎(docker-ce中的“ce”是社区版,ee是企业版)
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
#7、启动docker服务
sudo systemctl start docker
#8、查看docker的版本
sudo docker version
#9、验证docker引擎是否安装成功
sudo docker run hello-world
#10、第一次运行的时候会报找不到镜像,这时会去仓库拉取镜像然后再运行,这里可以通过命令来查看拉取到的镜像
sudo docker images
3.2.2 docker卸载
1、卸载docker引擎
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
2、删除缓存中的docker及容器
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
3.3 容器加速
首先登录阿里云官网https://cn.aliyun.com/,点击右上角的控制台进入入阿里云控制台:
选择弹性计算下的容器镜像服务:
运行所给的命令即可,主要内容时在etc/docker目录下创建一个deamon.json文件将阿里云加速网址写进去,然后重新加载守护进程配置文件,重启docker。
四、docker常用命令
4.1 显示信息
#1、显示docker的版本信息
docker version
#2、查看docker的系统信息
docker info
#3、显示命令解释
docker <命令> --help
4.2 镜像命令
#1、显示所有镜像
docker images <参数>
#2、docker搜索镜像
#这个搜索是模拟dockerhub官网的搜索项目,然后将项目的信息打印出来
docker search nginx
#3、docker下载镜像
docker pull nginx
docker pull nginx:1.23.0
#4、docker删除镜像
docker rmi <镜像名或镜像id>
docker rmi <镜像1> <镜像2> <镜像3>
docker rmi -f $(linux命令) =》 docker rmi -f $(docker images -aq)
4.3 容器命令
#1、运行容器
docker run <参数> <容器名> <控制台>
docker run -it nginx /bin/bash
#2、查看docker运行的容器
docker ps <参数>
docker ps -a #查看历史运行的容器
#3、在docker内部
exit #停止容器并退出
ctrl+P+Q #不停止退出容器
#4、在docker容器外部
docker start <容器id> #启动容器
docker restart <容器id> #重启容器
docker stop <容器id> #停止容器
docker kill <容器id> #杀死容器
#5、删除容器
docker rm 容器id
docker rm -f $(linux 命令)
docker pa -aq | xargs docker rm
#6、回到已退出但未停止的容器
docker attach <容器id>
docker exec -it <容器id> <控制台>
#7、后台启动容器
docker -d <镜像名>
#8、查看docker日志
docker logs -tf tail <限制日志行数> <容器id>
#9、查看容器元数据(容器从哪个镜像来的、启动命令、配置等等)
docker inspect <容器id>
#10、从容器拷贝文件到主机
docker cp <容器id>:<容器中文件路径> <主机路径>
4.4 commit镜像
docker commit 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" <容器id> <目标镜像名>:<tag>
4.5 容器数据卷
概念:将容器数据同步到容器外部的数据库中,需要从容器外部生成一个文件目录挂载到容器中。
# 命令挂载容器
docker run -it -v 主机目录:容器目录
#挂载后可以通过docker inspect <容器id>查看
匿名挂载:会在docker/volume下随机生成一个数据卷名称
docker run -d -P --name ngix01 -v /etc/nginx nginx
#查看本地的所有volume的情况
docker volume ls
具名挂载:会在docker/volume下随机生成一个数据卷名称
docker run -d -P --name juming_nginx -v juming:/etc/nginx nginx
指定名称挂载:
docker run -d -P --name juming_nginx -v /home/lxq/nginx:/etc/nginx nginx
#挂载时-v后的第三项是读写权限,ro:只读、rw:可读可写
docker run -d -P --name juming_nginx -v /home/lxq/nginx:/etc/nginx:ro nginx
多个容器数据卷的同步
#通过镜像mysql:1.0创建一个父容器
docker run it --name docker-father mysql:1.0
#通过镜像mysql:1.0创建一个子容器,并且子容器数据卷继承父容器
docker run it --name docker-children --volume-from docker-father mysql:1.0
4.6 挂载mysql
#安装mysql
docker pull mysql:5.7
#启动容器挂载mysql以及输入密码
#-d 后台运行
#-p 端口映射
#-v 卷挂载
#-e 环境配置
#--name 容器名称
docker run -d -p 10002:44211 -v /home/msql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_lxq mysql:5.7
#启动成功后,使用本地的sqlyog测试连接
五、docker打包项目
概念:用来构建docker镜像的文件
打包项目的流程:
1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里镜像仓库等等)
5.1 DockerFile指令
FROM #1、基础镜像
MAINTAINER #镜像的作者,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #添加其他包(镜像包)
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #指定对外端口
CMD #指定容器启动时需要运行的命令,仅最后一个生效
ENTRYPOINT #指定容器启动时需要运行的命令,可追加
ONBUILD #当构建一个被继承的DockerFile时会运行ONBUILD的指令
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建时设置环境变量
#CMD和ENTRYPOINT区别
#若dockerfile1文件中命令
CMD ["ls","-a"]
#若dockerfile2文件中命令
ENTRYPOINT ["ls","-a"]
#编译好镜像后得到镜像名为A,B
#现在想要在容器启动时查看所有目录详细信息即ls -a -l
docker run A #正确
docker run A -l #报错,-l替换了命令中的 ls -a
docker run B #正确
docker run B -l #正确
5.2 简单的dockerfile构建镜像
编辑dockerfile文件
示例一:
#从ubuntu容器生成
FROM ubuntu
#匿名挂载数据卷
VOLUME ["volume01","volume02"]
CMD echo "+++complete+++"
#进入bash
CMD /bin/bash/
示例二:
#注意:运行过程中没有手动操作,一旦涉及到手动操作会跳出导致镜像编译不成功
FROM ubuntu
MAINTAINER lxq<-----@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN apt-get update
RUN apt-get -y install vim
RUN apt-get -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "--------end--------"
CMD /bin/bash
编译dockerfile生成镜像
#编译docker-test-dockerfile文件生成一个仓库名为lxq/ubuntu的容器镜像
docker build -f /home/docker-test-dockerfile -t lxq/ubuntu:16.04
#当看到如下信息说明docker镜像编译成功
Successfully built 63e3fd7021e3
Successfully tagged lxq/ubuntu:16.04
测试镜像
#使用docker images查看编译生成的镜像
#用该镜像启动容器
#查看初始目录,是否可以使用dockerfile文件中命令所安装的软件
六、docker网络
参考https://www.cnblogs.com/hahaha111122222/p/13370773.html