- Docker
- 1、命令
- 1.1 镜像命令
- 1.2 容器命令
- 1.3 其他命令
- 2、Commit镜像
- 3、数据卷
- 4、挂载
- 5、Dockerfile
- 6、数据卷容器
- 7、Dockerfile构建步骤
- 8、DockerFile的指令
docker search mysql --filter=stars=3000
doker pull mysql:5.7 软件:版本号
docker rmi -f 镜像id docker rmi -f #(docker images -aq) 全部删除1.2 容器命令
docker pull centos
docker run [参数] image
–name=“Name” 容器名字
-d 以后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口 常用 -p主机端口:容器端口
启动并进入容器
docker run -it centos /bin/bash
从容器退回主机并停止
exit
退回主机不停止
Ctrl +q +p
当前运行容器
docker ps
历史运行容器
docker ps -a
- 删除容器
docker rm 容器id 不能删除正在运行的容器 ,强制删除 rm -f docker rm -f $(docker ps -aq) 删除所有容器 docker ps -a -q|xargs docker rm 删除所有容器
docker start docker restart docker stop docker kill1.3 其他命令
- 后台启动容器
docker run -d centos
docker ps 时发现centos没有运行,因为使用后台运行,没有前台进程,docker没有应用就会自动停止
- 查看日志
docker logs -f -t --tail [num] id
- 脚本一秒打印字符串
docker run -d centos /bin/sh -c "while true;do echo hmf;sleep 1;done"
- 查看容器中进程信息ps
docker top id
- 查看镜像的原信息
docker inspect id
- *进入当前正在运行的容器,进入容器后会开启新的终端新的进程,可以操作(常用)
docker exec -it 容器id 命令行
- 进入容器的代码,直接进入正在执行的终端,不会启动新的进程
docker attach 容器id
- 从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 主机路径
- 步骤
1、搜索镜像先去dockerhub上看版本信息 docker search 2、下载镜像 docker pull 3、运行测试 docker run -d --name nginx01 -p 3344:80 nginx-d 后台运行 --name取名 -p宿主机端口:容器端口 nginx默认80端口 4、curl localhost:宿主端口 查看服务状态 5、进入容器 docker exec -it nginx01 /bin/bash2、Commit镜像
docker commit -a="hmf" -m="add webapps app" 98c6b481759c tomcat01:1.03、数据卷
-
使用数据卷(数据同步)
docker run -v 宿主机地址:容器地址 centos /bin/bash
-
启动mysql
-d后台运行
-p端口映射
-v卷挂载
-e环境配置
–name容器名字
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.74、挂载
-
匿名挂载
docker run -d -p 宿主机端口:容器端口 --name 取名 -v 容器内路径:rw 容器
-
具名挂载(常用)
docker run -d -p 宿主机端口:容器端口 --name 取名 -v 卷名:容器内路径:ro 容器
-
指定路径挂载
docker run -d -p 宿主机端口:容器端口 --name 取名 -v /宿主机路径:容器内路径:ro 容器
-
:ro只读 :rw可读可写(默认)
所有的docker容器内的卷,在没有指定目录下都在 /var/lib/docker/volumes/xxxx/_data
Dockerfile就是用来构建docker镜像的构建文件
通过脚本生成镜像,镜像是分层的,脚本是一个一个的命令,每个命令就是一层
创建一个dockerfile文件编写文件中内容vim dockerfileFROM centosVOLUME ["volume01","volume02"]CMD echo "----end----"CMD /bin/bash执行builddocker build -f dockerfile -t hmf/centos:1.0 . 文件名字 容器名字 标签tag启动自己生成的容器docker run -it id /bin/bash6、数据卷容器
多个mysql同步数据
通过自己的镜像启动三个容器: 第一个 docker01docker run -it --name docker01 hmf/centos:1.0 第二个 docker02 并挂载 docker01docker run -it --name docker02 --volumes-from docker01 hmf/centos:1.0 在docker01的vloume01中创建一个文件同步到了docker02中docker01:数据卷容器 --vloume01-from就好比继承父类 第三个 docker03 并挂载 docker01docker run -it --name docker03 --volumes-from docker01 hmf/centos:1.0 再在docker03的vloume01中创建一个文件同步到了docker01中将第一个docker01 删除 docker rm -f 474ac7ed3300 发现 docker02 docker03还具有数据,依旧可以访问
多个mysql实现数据共享
第一个 mysql01docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 第二个 mysql02docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --vloumes-from mysql02 mysql:5.7 这就实现了俩个容器数据同步!
- 结论
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止!
但是一旦持久化到了本地,这个时候,本地的数据是不会删除的!
7、Dockerfile构建步骤1、编写一个dockerfile文件
2、docker build 构建成一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库!)
开发,部署,运维…缺一不可
DockerFile:构建文件,定义了一切的步骤,源代码
Dockerimages:通过DockerFile构建生成的镜像,最终发布和运行的产品!
Docker容器:容器就是镜像运行起来提供服务器
8、DockerFile的指令


