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支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的。
 

 

  •  核心概念
docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作;
docker仓库(Registry):用来保存各种打包好的软件镜像;
docker镜像(Images):软件打包好的镜像;放在docker仓库中;
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
 
  • 使用Docker的步骤:
1)、安装Docker
2)、去Docker仓库找到这个软件对应的镜像;
3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
4)、对容器的启动停止就是对软件的启动停止;
 
1)、安装linux虚拟机
  VMWare、VirtualBox(安装);
3)、双击启动linux虚拟机;使用 root/123456登陆
4)、使用客户端连接linux服务器进行命令操作;
5)、设置虚拟机网络;
桥接网络=选好网卡==接入网线;
6)、设置好网络以后使用命令重启虚拟机的网络
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)、镜像操作
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
[root@localhost ~]#  docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=111 -d mysql:5.7
 

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

 

[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad10e4bc5c6a mysql "docker‐entrypoint.sh" 4 seconds ago Up 2 seconds 0.0.0.0:3306‐>3306/tcp mysql02
  • 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. 如果还是无效。重启系统(本人是重启后成功的)

成功:

 

 

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

posted @ 2021-01-06 21:42  xiluhua  阅读(113)  评论(0)    收藏  举报