前言
1.关于docker的概念
镜像、容器、仓库,自己百度,不做赘述。
2.安装docker
yum install docker
3.查看docker信息
docker version 查看docker版本
docker info
4.启动docker
service docker start 启动docker
chkconfig docker on 设置随系统启动
一、针对容器的操作
run/create[镜像名]: 创建一个新的容器并运行一个命令
start/stop/restart[容器名]:启动/停止/重启一个容器
kill [容器名]: 直接杀掉容器,不给进程响应时间
rm[容器名]:删除已经停止的容器
pause/unpause[容器名]:暂停/恢复容器中的进程
1.查看容器
docker ps //查看运行中的容器
docker ps -a//查看所有容器
docker inspect mynginx // 查看mynginx容器配置元数据
2.创建容器
docker run --name mynginx1 -p 80:80 -d nginx //根据镜像nginx,创建名为mynginx的容器,并将容器的80端口绑定到虚拟机80端口
2.1交互式创建容器 -it
docker run -it --name cent centos:latest /bin/bash
2.2进入已运行的容器 exec
docker exec -it nginx /bin/bash
2.3 创建容器并挂在目录 -v
docker run -dit -v /root/peter_dir/:/pdir --name cent centos
2.4 设置容器随docker自动启动
docker update --restart=always <CONTAINER ID>
3.删除容器
docker rm -f db01 db02 //强制删除容器db01、db02
docker rm $(docker ps -a -q)// 删除所有已经停止的容器
4.修改容器
4.1拷贝文件
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp 96f7f14e99ab:/www /tmp/
二、针对镜像的操作
镜像和容器的区别就是,容器对镜像加了一层读写层。想要把容器变为镜像,那就把这个读写层转为只读。
1.查看镜像.
docker images //查看本地所有镜像
2.创建镜像
2.1.根据容器创建镜像
docker commit -a "james" -m "james's tomcat." tomcat1 tomcat:james
2.2.使用dockfile方式创建镜像
- 创建Dockerfile(文件名必须正确)文件,内容如下
# 基础容器
FROM tomcat
# 把虚拟机的文件复制到镜像中
ADD ["target/mvc.war", "/usr/local/tomcat/webapps/mvc.war"]
# 声明容器提供服务的端口
EXPOSE 8080
- 镜像打包命令
docker build -t mvc:v1
2.3 使用Dockerfile的maven插件打包
1.创建Dockerfile文件(同上)
2.添加maven插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>dockermvc:peter</imageName>
<dockerDirectory>${project.basedir}</dockerDirectory>
<skipDockerBuild>false</skipDockerBuild>
<resources>
<resource>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
3.linux环境下执行命令
mvn clean package docker:build
3.删除镜像
docker rmi 【镜像名:版本号】//删除指定镜像
4.修改镜像
三、针对仓库的操作
1.创建私有仓库
docker run -d --name registry -p 5000:5000 registry
2.提交镜像到私有仓库
docker tag hello-world:latest 192.168.31.214:5000/hello-world:zc
docker push 192.168.31.214:5000/hello-world:zc
TIPS:
私服默认只能使用https,需要配置开放http
vi /etc/docker/daemon.json
{
"bip":"172.17.3.1/24",
"registry-mirrors":["https://registry.docker-cn.com"],
"insecure-registries":["192.168.31.214:5000"]
}
2.1.查看镜像的url
http://192.168.31.214:5000/v2/_catalog
2.2.查看镜像版本的url
http://192.168.31.214:5000/v2/hello/tags/list
2.3. 建议的操作方式:
直接在maven的docker插件中配置
<imageName>192.168.31.214:5000/hello:james</imageName>
然后命令 mvn clean package docker:build docker:push 直接推送到仓库
在仓库中的镜像,局域网内的所有机器都可以访问
3.远程仓库docker hub
远程仓库的命令与本地仓库类似,不过,首先要登陆远程仓库
docker login //登陆 https://hub.docker.com/ ,根据提示输入username,password
假设仓库名为matinlee,操作命令如下:
docker tag hello-world:latest matinlee/hello:zc
docker push matinlee/hello
四、docker的数据管理
docker 容器运行,产生一些数据/文件/等等持久化的东西,不应该放在容器内部。应当 以挂载的形式存在主机文件系统中。
容器是一个运行态的服务器,是瞬时性的,不承载持久功能,因此我们需要把容器中的数据挂出来。
1.不指定容器宿主机挂载目录
docker run --name tomcat4 -p 8080:8080 -v /usr/local/tomcat/webapps tomcat:latest
默认挂在目录通过docker inspect tomcat4查看
2.指定容器宿主机挂载目录
格式:-v path1(宿主机目录):path2(容器目录)
docker run --name tomcat4 -p 8080:8080 -v /webapps:/usr/local/tomcat/webapps tomcat:latest
3.引用数据卷volumes-from
通过volumes-from对数据卷进行引用,可以直接同步引用容器的挂载目录
格式:--volumes-from 容器名。
docker run -d --name tomcat666 -p 8081:8080 --volumes-from tomcat4 tomcat:latest
4.使用建议
可以使用一个从来不运行的容器作为统一配置,当运行其他容器时,直接引用该容器的数据卷