docker学习最全最易理解,看完上手

随着公司项目的增多,有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://<registry_ip>:5000/v1/ atcol/docker-registry-ui  本地仓库在页面展示,访问地址:http://host_ip:8080,<registry_ip>是镜像运行ip,可以

 

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 山姆大叔 "1172004952@qq.com"

 

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

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值