随着公司项目的增多,有java,nodejs,python等项目的部署与开发,不可能在服务器上装有各自的环境去适应千奇百怪的开发语言开发的项目,故采用docker来管理这些项目,下面是我学习docker以来自己总结的一些实用的docker命令和干货
docker好处:
1.一次打包,到处运行,
2.环境隔离,对环境变量没有要求,全都在docker内,应用相互之间没有影响
3.启动速度快
docker安装成功后会多一个docker专用ip
yum install net-tools
docker默认仓库是dockerhub
docker常用命令:
sudo gpasswd -a 用户名 docker 将用户加入docker组
sudo groupadd docker 添加docker组
镜像:
docker tag 镜像id 新镜像名:标签 给镜像id对应镜像打名字与标签
docker run -it -d -p 80(映射):8080(项目) 镜像名:版本号 (容器启动生成id)
docker run -it -p 8080:8080 -v `pwd`/jdbc.properties:/usr/local/tomcat/classpath/jdbc.properties -d 192.168.9.69:5000/doctor:v1.0.3 (挂载本地文件到容器里面运行)
docker search 镜像名 在dockerhub上搜索镜像
docker ps -a 查看容器
docker push 镜像名 需登录dockerhub docker login
docker rmi 镜像名
docker pull 镜像名
docker run 镜像名
docker images
docker inspect 镜像id 查看镜像详情
容器:
docker create --name 容器名 已有镜像名 创建容器
docker logs -f 容器id 查看日志
docker export 容器id>test.tar(导出文件名) 导出容器
cat test.tar(文件名) | docker import - 镜像名:标签 导入容器成为镜像
docker stop 容器id
docker start 容器id
docker rm 容器id
docker exec -it 容器id bash 来到容器内部 exit退出
仓库(私有仓库是仓库,上传上来的镜像是存在仓库里,只有pull下来以后才能通过docker images看见该镜像):
docker pull registry 拉取registry镜像
docker run -e SEARCH_BACKEND=sqlalchemy -e SQLALCHEMY_INDEX_DATABASE=sqlite:////tmp/docker_registry.db -d --name registry -p 5000:5000 registry 构建docker私有仓库命令
设置成功后上传的镜像或下载的镜像必须带有域名,例如docker push host_ip:5000/镜像名 ,如果上传不成功, 通过修改docker的配置文件“etc/systemconfig/docker",重启docker来解决这个问题。(find / -name docker)
但发现docker1.12.3版本并无此文件,根据网上创建此文件,并填入相应内容,重启docker无效果,仍然报此错误。
解决方法:
在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:
{ "insecure-registries":["192.168.1.100:5000"] }
保存退出后,重启docker。systemctl restart docker 然后启动相应容器,问题解决
docker run -d --name registry_ui -p 8080:8080 -e REG1=http://
通过 docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID(容器id)获得
,docker logs -f 容器id/镜像id 查看启动情况
创建镜像的方法有三种:
1.基于已有镜像的容器创建 docker commit -a "作者" -m "提交信息" 容器id 新镜像名
2.基于本地模板的导入 docker save -o test.tar(文件名) 镜像id 镜像迁出命令(压缩镜像) docker load --input test.tar(文件名) 镜像载入命令(解压镜像)
3.基于dockerfile创建 docker build -t="镜像名" dockerfile文件路径(.代表当前路径)
本机和容器之间的文件传输(本机传到容器) :
docker cp 本地文件路径 容器ID全称:容器路径 比如用于往tomcat容器中加入项目
本机和容器之间的文件传输(容器传到本机) :
docker cp
容器
ID全称:容器文件路径 本地路径
docker开端口使得能够通过http访问api(远程调用api,需停掉docker)
# 查看配置文件位于哪里
systemctl show --property=FragmentPath docker
#编辑配置文件内容,接收所有ip请求
sudo gedit /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376
#重新加载配置文件,重启docker daemon
sudo systemctl daemon-reload
sudo systemctl restart docker
docker官方文档上有相关说明(Configure and run Docker on various distributions),ubuntu上是可行的
sudo vi /etc/default/docker
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
也可以不通过配置,直接用这种方式启动,这种方式不是以守护式的方式启动服务的,但是可以通过nohup命令挂起, 该命令的一般形式为:nohup command &
docker daemon -H=0.0.0.0:2375 dockerd -D -H 0.0.0.0:2376(会列出所有api的访问路径)
docker daemon=dockerd
Dockerfile例子
FROM tomcat:7
MAINTAINER 山姆大叔 "[email protected]"
ENV WORK_PATH /usr/local/tomcat/bin
ENV TOMCAT_CLASSPATH_FILE setclasspath.sh
RUN rm $WORK_PATH/$TOMCAT_CLASSPATH_FILE
COPY ./$TOMCAT_CLASSPATH_FILE $WORK_PATH/
RUN mkdir -p /usr/local/tomcat/classpath
RUN mkdir -p /usr/local/tomcat/webapps/filetool
ADD ./jdbc.properties /usr/local/tomcat/classpath/
ADD ./filetool /usr/local/tomcat/webapps/filetool/
ADD ./doctor.war /usr/local/tomcat/webapps/
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
附:docker maven tomcat java安装 http://knight-black-bob.iteye.com/blog/2399199