系统性docker干货

一、docker背景及作用

参考https://blog.csdn.net/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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值