Docker 相关
感谢尚硅谷!!!
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
systemctl daemon-reload
systemctl restart docker
删除 mobile 字样的镜像
docker images --filter "dangling=true" --format "{{.Repository}}:{{.Tag}}" | grep 'mobile' | xargs -r docker rmi
检查 Docker 日志
如果容器启动失败或者你遇到任何问题,可以检查 Docker 容器的日志以获取详细的错误信息:
docker logs mysql8.01
journalctl -u docker -f
docker update --restart=always 容器名称 开启指定容器自启动 docker update --restart=no 容器名称 关闭指定容器自启动
- 简介

- 核心概念
- 使用Docker的步骤:
- 安装Docker ( https://docs.docker.com/engine/install/centos/ )
service network restart
- 在linux虚拟机上安装docker
1、检查内核版本,必须是3.10及以上 uname ‐r 2、安装docker yum install docker 3、输入y确认安装 4、启动docker [root@localhost ~]# systemctl start docker [root@localhost ~]# docker ‐v Docker version 1.12.6, build 3e8e77d/1.12.6 5、开机启动docker [root@localhost ~]# systemctl enable docker Created symlink from /etc/systemd/system/multi‐user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. 6、停止docker systemctl stop docker
- Docker常用命令&操作
1、搜索镜像 [root@localhost ~]# docker search tomcat 2、拉取镜像 [root@localhost ~]# docker pull tomcat 3、根据镜像启动容器 docker run ‐‐name mytomcat ‐d tomcat:latest 4、docker ps 查看运行中的容器 5、 停止运行中的容器 docker stop 容器的id 6、查看所有的容器 docker ps ‐a 7、启动容器 docker start 容器id 8、删除一个容器 docker rm 容器id 9、启动一个做了端口映射的tomcat [root@localhost ~]# docker run ‐d ‐p 8888:8080 tomcat ‐d:后台运行 ‐p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口 10、为了演示简单关闭了linux的防火墙 service firewalld status ;查看防火墙状态 service firewalld stop:关闭防火墙 11、查看容器的日志 docker logs container‐name/container‐id
更多命令参看 https://docs.docker.com/engine/reference/commandline/docker/ 可以参考每一个镜像的文档
- 启动 mysql
docker run -p 3316:3306 --name mysql_glmall \
-v ~/mydata/mysql/conf:/etc/mysql \
-v ~/mydata/mysql/log:/var/log/mysql \
-v ~/mydata/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=111 \
-d mysql:5.7
- docker run --help
docker run -it 8652b9f0cb4c # 交互式启动
docker run -d 8652b9f0cb4c # 后台运行启动,无交互

- 后台启动 linux 不退出
docker run -d 镜像id /bin/sh -c "while true; do echo hello test; sleep 2;done"
- 查看容器日志
docker logs -f -t --tail 10 容器id
-t 加入时间戳
-f (同 Linux tail 命令)
--tail 显示最后多少条
- docker top c60bfe1c50a8

- docker inspect c60bfe1c50a8

- 重新进入容器

- 不进入容器,执行命令

- 退出容器,回到宿主机
Ctrl+p+q
- copy 容器内文件到主机上
docker cp 容器ID:容器内路径 目的主机路径

- 创建镜像
docker commit -a="webapps has ROOT" -m="webapps has ROOT" 910ed25894c8 tony/mytomcat:1.0

- 容器数据卷
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
- 容器卷命令:
直接命令添加将容器与宿主机之间文件绑定(容器与宿主机之间数据共享):
docker run -it -v /myDataValue:/dataVolumeContainer 8652b9f0cb4c
查看数据卷是否挂在成功:
docker inspect 容器ID
只读权限:
docker run -it -v /宿主机绝对路径目录:/容器内目录 ro 镜像名
Dockerfile为Image的描述文件:(可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷)
# volume test FROM 镜像id VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,--------success1" CMD /bin/bash
build后生成新镜像:
docker build -f /myDocker/dockerfile -t my01/centos:1.0 . # 最后面不要漏了点
- 数据卷容器
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
- 容器卷继承&共享
创建父容器并在其数据卷中创建文件 doc01_add.txt
基于父容器卷创建容器

在容器中跑自定义的 tomcat,申明两个容器数据卷,一个数据卷对应应用 test 目录;另一个对应日志 logs 目录
docker run -d -p 9080:8080 --name myt9 -v /mytomcat9/test:/usr/local/apache-tomcat-9.0.43/webapps/test -v /mytomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.43/logs --privileged=true 0077537aecd4 (镜像 id)

- UnionFS 联合文件系统

- docker 架构图

- 阿里云加速镜像(希望“墙”早日被推掉):


sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://fhujjcl8.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

- Docker运行原理:
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。

- Dockerfile, Docker镜像 & Docker 容器之间的关系


- 小总结

- 安装 mysql
docker run -p 12345:3306 --name mysql
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d
-v /zzyyuse/mysql/logs:/logs
-v /zzyyuse/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=111
-d mysql:5.7 命令说明: -p 12345:3306:将主机的12345端口映射到docker容器的3306端口。 --name mysql:运行服务名字 -v /zzyyuse/mysql/conf:/etc/mysql/conf.d :将主机/zzyyuse/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d -v /zzyyuse/mysql/logs:/logs:将主机/zzyyuse/mysql目录下的 logs 目录挂载到容器的 /logs。 -v /zzyyuse/mysql/data:/var/lib/mysql :将主机/zzyyuse/mysql目录下的data目录挂载到容器的 /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。 -d mysql:5.6 : 后台程序运行mysql5.6
- 进入 mysql 后台
docker exec -it MySQL运行成功后的容器ID /bin/bash
- 数据备份
docker exec myql服务容器ID sh -c ' exec mysqldump --all-databases -uroot -p"123456" ' > /zzyyuse/all-databases.sql
- 停止并删除所有在运行的容器
[root@localhost ~]# docker rm -f $(docker ps -q)
- Error: Failed to download metadata for repo 'AppStream'

或者一直等,提示:

原因是畜生建了一道墙!
解决办法
1. 下载阿里源:
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
2. 运行 yum makecache 生成缓存(或 yum clean all&&yum makecache )
3. 重启docker服务【 重要 】
systemctl restart docker
4. 再执行命令(执行成功 ):
[root@localhost mydocker]# docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .
5. 如果还是无效。重启系统(本人是重启后成功的)
成功:


————————————————

浙公网安备 33010602011771号