docker使用教程

Docker使用教程
1. 安装DockerToolbox-17.10.0-ce.exe, 执行默认安装即可,不要修改安装目录,如已安装git,则安装该工具时不要勾选git
2. 安装完成后,桌面上会生成3个应用,Docker Quickstart Terminal,  Kitematic, Oracle VM VirtualBox
Docker Quickstart Terminal: docker操作命令行,类似shell窗口,
第一次运行会进行虚拟机安装,配置网络;
第二次打开出现docker的图标且没有错误提示,则
表明docker安装虚拟机成功。默认的虚拟机会显示   default machine with IP 192.168.99.100


Kitematic: docker容器查看窗口
Oracle VM VirtualBox: 虚拟机窗口


额外的命令:-----
将系统时间日期设定指定值   date -s "2018-01-22 17:17:17"
将当前时间和日期写入BIOS,避免重启后失效  hwclock -w 
查看当前时间  date 
查看本月月历  cal


3. docker的一些操作指令
查看版本: docker --version




4、镜像加速
aliyun镜像加速获取地址:https://cr.console.aliyun.com/#/accelerator


docker-machine ssh default 


5.挂载文件
mount    可以看到docker_study在虚拟机内的路径 


挂载本地目录
docker pull registry 
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry 


docker run --name=mysql -d -p3306:3306 -v /data/mysql/data:/var/lib/mysql mysql:5.6
6、Dockerfile文件 
#VERSION 1.0.0




#基于哪个镜像
FROM 

FROM java:8

#将本地文件夹挂载到当前容器

VOLUME /tmp

#复制文件到容器

ADD core-eureka.jar core-eureka.jar

RUN bash -c 'touch /core-eureka.jar'

#声明需要暴露的端口

EXPOSE 9000

#配置容器启动后执行的命令

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/core-eureka.jar"]




7、构建镜像(注意后面的‘.’=当前目录)
docker build -t 标签/文件的相对路径 .(server/containers)
eg:docker build -t ubuntu/containers/eureka-server:1 .
8、启动镜像
docker run -p 9000:9000 server/containers:latest


<!-- 删除镜像:       docker rmi $(docker images -q)  -->  docker rmi <image id>


docker-compose up -d所有的服务将使用后台模式被启动
docker-compose.yml
例如:
version: '2'
services:
    web: 
      image: wordpress:latest 
      links: 
        - db
      ports: 
        - "8002:80"
      environment:
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_PASSWORD: 123456
    db: 
      image: mysql 
      environment: 
        - MYSQL_ROOT_PASSWORD=123456






# 查看运行中的容器
docker ps 


# 查看所有容器
docker ps -a


# 退出容器
按Ctrl+D 即可退出当前容器【但退出后会停止容器】


# 退出不停止容器:
组合键:Ctrl+P+Q


# 启动容器
docker start 容器名或ID


# 进入容器
docker attach 容器名或ID


# 停止容器
docker start 容器名或ID


# 删除全部容器--慎用
docker stop $(docker ps -q) & docker rm $(docker ps -aq)


#保存容器,生成镜像
docker commit 容器ID 镜像名称




docker run -d -p 5000:5000 --restart=always --name registry --privileged=true -v /data/:/var/lib/registry registry:2.4.1
docker run -d -p 5000:5000 -v /data/registry:/var/lib/registry --name registry --restart=always registry
docker通过http访问 (镜像同理{"registry-mirror":["http://019a7061.m.daocloud.io"]})
–registry-mirror=http://hub-mirror.c.163.com 
-registry-mirror=https://lbcmsrsd.mirror.aliyuncs.com
第一种方案:
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd   --insecure-registry 172.17.0.2:5000(容器ip和端口)
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.77.130:5000   
  第二种方案:
vim /etc/docker/daemon.json  新增一下内容
{ "insecure-registries":["192.168.77.130:5000"]}


查看网络
docker network ls
进入容器
docker attach 镜像id/镜像名


lsof -i:5000
查看端口监听状态
ss -anlp | grep :5000
netstat -anlp | grep :5000
查看docker
rpm -qa | grep docker
从yum上下载docker-ce
yum -y install docker-ce
重新加载
systemctl daemon-reload
重启docker服务
systemctl restart docker.service
                                                                       
2. docker多主机部署,(技术方案: etcd,k8s, flannel, swarm)  






docker使用总结------------------------------------------------------------------------


1、移除非官方软件包
sudo yum -y remove docker
2、设置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \ 
     --add-repo \
     https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo
3、安装docker
sudo yum makecache fast
sudo yum -y install docker-engine
4、启动docker
sudo systemctl start docker
5、验证安装是否正确
sudo docker run hello-world
6、查看docker版本
docker version
7、卸载docker
sudo yum -y remove docker-engine
sudo rm -rf /var/lib/docker
8、配置镜像加速
vim /etc/docker/daemon.json


sudo mkdir -p /etc/docker 
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors":{"https://362p0mbf.mirror.aliyuncs.com"}
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
9、删除镜像
docker rmi 镜像名称/id
  删除所有镜像
docker rmi -f ${docker images}   --   -f 表示强制删除
10、新建并启动容器
docker run java /bin/echo 'Hello World'  终端打印 Hello World
docker run -d -p 91:80 nginx   (-d 后台运行  -p宿主机端口:容器端口  #开放容器端口到宿主机端口) 
11、进入容器
docker attach 容器id   或者使用nsenter工具
docker inspect --format "{{.State.Pid}}" $CONTAINER_ID  获取pid
nsenter --target "$PID" --mount -uts --ipc --net --pid   使用nsenter工具进入容器
  删除指定容器 docker rm 容器id(+ -f删除正在运行的)
  删除所有的容器 docker rm -f $(docker ps -a -q)   
11、使用registry搭建私有docker仓库
docker run -d -p 5000:5000  --restart=always --name registry2 registry:2
docker run -d -p 5000:5000 -v /data/registry:/var/lib/registry --name registry --restart=always registry
docker通过http访问
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd   --insecure-registry 172.17.0.2:5000(容器ip和端口)   ????
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.77.131:5000              ???                                        查找仓库             find / -name registry
查看registry镜像信息
curl http://<ip>:5000/v2/_catalog    
返回:例如  {"repositories":["centos6.8","jenkins1.638","nginx","redis3.0","source2.0.3","zkdubbo"]}  
     备注:
1>、列出当前所有镜像 curl http://192.168.77.130:5000/v2/_catalog
2>、列出当前指定镜像 curl http://192.168.77.130:5000/v2/_catalog?n=100
3>、搜索镜像 curl http://192.168.77.130:5000/v2/wordpress/tags/list
4>、确认registry是否正常工作 curl http://192.168.77.130:5000/v2/
  
12、使用Dockerfile构建镜像
mvn clean package 将项目打成jar包
touch Dockerfile 创建Dockerfile文件
#VERSION 1.0.0




#基于哪个镜像
  
FROM java:8




#创建者
    
MAINTAINER hlsamor "hlsamor@163.com"




#将本地文件夹挂载到当前容器
    VOLUME /tmp




#拷贝文件到容器,也可以直接写成 ADD eureka-server-0.0.1-SNAPSHOT.jar /app.jar 


ADD eureka-server-0.0.1-SNAPSHOT.jar  app.jar


RUN bash -c 'touch /app.jar'




#开放端口号


EXPOSE 9000
# 配置容器启动后执行的命令


ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]  
docker build -t registry/eureka-server:0.0.1 .  #格式 : docker build -t 仓库名称/镜像名称(:标签) . 文件的相对位置
docker run -d -p 9000:9000 registry/eureka-server:0.0.1       然后访问宿主机ip:9000/   
13、push镜像到私有仓库  
push前修改镜像标签 
docker tag registry/eureka-server:0.0.1 localhost:5000/registry/eureka-server:0.0.1 
docker push  localhost:5000/registry/eureka-server:0.0.1   
14、使用maven插件构建docker镜像
pom中加入
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>     
  <configuration>
<imageName>IMCloud/core-eureka:0.0.1<imageName>
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
 <resource>
<targetPath>/</targetPaht>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
 </resource>
</resources>
  </configuration>
</plugin>
mvn clean package docker:build  执行该命令 构建Docker镜像
插件读取Dockerfile进行构建
在src/main/docker目录下,新建Dockerfile  修改pom.xml
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>     
  <configuration>
<imageName>IMCloud/core-eureka:0.0.2<imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
 <resource>
<targetPath>/</targetPaht>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
 </resource>
</resources>
  </configuration>
</plugin>
将插件绑定在某个phase执行
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>   
  <executions>
  <execution>
<id>build-image</id>
<phase>package</phase>
<goals>  
  <goal>build</goal>
</goals>
</execution>
  </executions>  
  <configuration>
<imageName>IMCloud/core-eureka:0.0.1<imageName>
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
 <resource>
<targetPath>/</targetPaht>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
 </resource>
</resources>
  </configuration>
</plugin>
此时只需要执行mvn package  就会自动执行mvn docker:build  
15、使用maven插件push镜像到Docker Hub
修改maven全局的配置文件settings.xml
<server>
<id>docker-hun</id>
<username> DockerHub用户名</username>
<password> DockerHub密码 </password>
<configuration> <email>DockerHub邮箱 </email>  </configuration>
</server>
修改pom.xml
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>     
  <configuration>
<imageName>IMCloud/core-eureka:0.0.1<imageName>
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
 <resource>
<targetPath>/</targetPaht>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
 </resource>
</resources>
<serverId>docker-hub</serverId>   与maven配置文件中配置的server.id一致,用于推送镜像
  </configuration>
</plugin>
    然后执行mvn clean package docker:build -DpushImage
    推送到私有仓库 <imageName>localhost:5000/IMCloud/eureka-server:0.0.2</imageName>
当然也可以借助imageTags更为灵活的指定镜像名称和标签
<configuration>
<imageName>IMCloud/eureka-server</imageName>
<imageTags> 
<imageTag>0.0.5</imageTag>  
<imageTag>latest</imageTag>  
</imageTags>
 ...
</configuration>                                                                                                       或者在执行构建命令时,使用dockerImageTags参数指定标签名称 eg:
mvn clean package docker:build -DpushImageTags -DdockerImageTags=latest -DdockerImageTags=another-tag
注意:如果需要构建相同名称的镜像,将forceTags设置为true 在<configutation>内增加<forceTags>true</..>                                                                                                                                      16、使用Docker Compose编排微服务
  安装Compose  (shell方式)
curl -L "https://github.com/docker/compose/release/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  安装脚本添加执行权限
chmod +x /usr/local/bin/docker-compose
  测试是否安装成功 : docker-compose --version
在bash下安装compose命令补全工具  (需要重新登录)
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version--short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose                                          在jar包所在路径下创建docker-compose.yml
version: '2'
    format
services:
    eureka:     #指定服务名称
      build: #指定Dockerfile所在路径
      ports:
- "9000:9000"  #端口映射
使用docker-compose up命令 (+  -d后台启动并运行这些容器)


实战------------------------------------------------------------
   使用docker-maven插件
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>     
  <configuration>
<imageName>IMCloud/${project.artifactId}:${project.version}<imageName>
<forceTags>true</forceTags>
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
 <resource>
<targetPath>/</targetPaht>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
 </resource>
</resources>
  </configuration>
</plugin>
  更改微服务配置
eureka:
  client:
      serviceUrl:
defaultZone:http://discovery:9000/eureka/
在每个项目的根目录下执行命令 : mvn clean package docker:build
编写docker-compose.yml
version: '2'
services:
  core-eureka:
     images: IMCloud/core-eureka:0.0.1-SHAPSHOT
     ports:
  - "9000:9000"
     links:
- core-eureka:discovery
     
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>cewaydocker2017/${project.artifactId}</imageName>
<!-- <baseImage>java</baseImage> -->
<!-- <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint> -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!--解决Connect to localhost:2375的问题的其中一种方式,注意要跟docker-machine env相一致 -->
<dockerHost>https://192.168.99.100:2376</dockerHost>                
<dockerCertPath>C:\Users\CW5320\.docker\machine\machines\default</dockerCertPath>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值