docker
docker
docker的基本组成
- 镜像
- 容器
- 仓库



安装docker
- 检查linux版本
- 卸载老版本linux
- 安装gcc【yum install gcc / yum install gcc-c++】
run干了什么


Docker命令
帮助启动类命令

镜像命令
-
查看docker镜像 ----------- docker images
![image-20230217190249968]()
-
查找某个镜像----------------------docker search hello-world

- 拉取镜像-------------docker pull

- 查看镜像/容器/容器卷所占用的空间-------docker system df
![image-20230219101715434]()

- 删除镜像----------docker rmi 镜像名字/ID
面试题
什么是虚悬镜像

容器命令
环境
拉去ubuntu的镜像

- 新建+启动容器--------------------------------docker run 选项 镜像 参数



- 罗列出所有正在运行的docker容器-----------docker ps 选项


- 退出容器------------------------exit(退出即容器停止)/ctrl+p+q(退出容器不停止)
- 启动已经停止运行的容器-----------------docker start 容器ID或者容器名
- 重启容器------------------------docker restart 容器ID或者容器名
- 停止容器------------------------docker stop 容器ID或者容器名
- 强制停止容器------------------docker kill 容器ID或容器名
- 删除已停止的容器 -----------docker rm 容器ID/容器名 dockerrm -f
- 启动守护式容器---------------docker run -d 镜像名(有些只能用交互式)
- 查看容器日志------------------docker logs 容器ID
- 查看容器内运行的进程------docker top 容器ID
- 查看正在运行的容器并以命令行交互-----docker inspect 容器ID
- 重新进入交互-------docker exec -it 容器ID bashShell
容器文件------->主机

- 备份
- 只备份容器内某文件 docker cp 容器ID:文件目录 主机目录

将容器导出为tar
docker export 容器Id > 名字

将tar导入成镜像
cat abc.tar | docker import - 用户名/镜像名:镜像版本

镜像的分层概念






docker commit提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息"-a="作者" 容器ID要创建的目标镜像名:[标签名]

docker私有库

如何拥有自己的私服
- docker pull registry-------拉去镜像
- docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry-privileged=true registry
![image-20230221210136988]()

案例
在原装ubuntu上安装ifconfig命令推送到私服
- 启动ubuntu容器

- 更新
![image-20230221211220549]()
- 安装 net-tools
![image-20230221211402069]()
- 发现ifconfig安装完成
![image-20230221211445508]()
- commint生成镜像
![image-20230221211816310]()
- 运行容器发现存在ifconfig命令
![image-20230221212153429]()
- 查看私服库有哪些镜像
![image-20230221212507065]()
- 将镜像修改为复合私服规范的Tag
![image-20230221212625483]()
- clone一份镜像用于做规范Tag
![image-20230221212826957]()
- 修改配置文件使私服库允许使用http
![image-20230221213721659]()
- 推送到私服
![image-20230221225639148]()
容器卷

当开启这个后,容器内的root才是真正的root,否则知识一个普通用户
容器卷的作用

容器卷是什么

- 使用案例
![image-20230223194128970]()
容器卷能干吗

容器卷与主机互通互联
-
命令添加 见上面
-
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu -
在容器内创建文件回到主机查看是否存在,在主机创建文件回到容器查看是否存在
-
![image-20230223195912294]()
-
查询容器内部-----docker inspect 容器id
-
![image-20230223223459599]()
思考:如果docker容器挂掉了在宿主机进行操作,重启docker容器后,容器能看到修改吗
答案:docker容器重启后任然可以获得主机的操作
容器卷ro和rw读写规则

默认就是rw同上面
目的:将容器内部改为只读----->read only

容器卷之间的继承
命令

使用后:在容器2内增加文件,在容器1以及主机都会拥有
思考1:如果容器1停掉,容器2会受影响吗?
不会,容器2只是继承了容器1的挂载路径,容器2和容器1是解耦的
思考2:如果容器1重新启动,能读到容器2创建的文件吗?
可以读到容器2创建的文件
docker上安装软件
安装Tomcat
-
docker pull tomcat
-
![image-20230224101019697]()
-
启动成功后查看能否访问

- 原因,新版本首页文件不在默认路径
- 解决办法:
- 进入容器:docker exec -it tomcat容器ID /bin/bash
- 将路径下的webapps删除掉----rm -f webapps
- 将webapps.dist修改为webapps
- 重新访问8080
![image-20230224101953651]()
使用免修版本的tomcat
- docker pull billygoo/tomcat8-jdk8
- 启动该版本
安装mysql(简单版)
- docker pull mysql:5.7
- docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
![image-20230224104227183]()
连接navicat

插入数据失败
原因:docker上默认字符编码隐患

存在问题:中文乱码问题,没有做容器卷备份
安装mysql(实战版)
-
命令:docker run -d -p 3306:3306 --privileged=true -v /yhduse/mysql/log:/var/log/mysql -v /yhduse/mysql/data:/var/lib/mysql -v /yhduse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
-
![image-20230224110438723]()
-
新建my.cnf---->通过容器卷同步给mysql容器实例解决中文乱码问题
-
创建my.cnf
-
[root@localhost conf]# vim my.cnf
-
[client] default_character-set=utf8 [mysqld] collation_server=utf8_general_ci character_set_server=utf8 -
重启mysql容器实例
-
用navicat插入中文发现成功--解决乱码问题
安装Redis
-
启动redis----->docker run -d -p 6379:6379 redis:6.0.8
-
启动redis命令----->
-
docker run -p 3306:3306 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf -
这边踩到坑,配置文件有问题------>我直接赋值文件过去
-
解决问题
-
问题:如何证明使用的是自己的配置文件
-
证明:在主机修改配置问津数据库个数,重启容器进去使用select 15
-
![image-20230224145516437]()






















浙公网安备 33010602011771号