docker入门

一.认识docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

二.docker架构及特点

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类


镜像是不可变对象
容器(相当于虚拟机)是可以改变对象
容器可以封装成一个镜像也就是说容器和镜像是可以相互转换的

 

三.docker常用操作

  1.关于镜像

###############查看本地镜像
docker images


########删除镜像
docker rmi 镜像名称    
docker rmi mysql:5.6

###############从互联网上搜索镜像
docker search python


###############从互联网拉取(下载)镜像
docker pull python
docker  pull mysql:5.6

  2.关于docker操作

################启动与关闭docker虚拟机
systemctl start docker 
systemctl restart docker 
systemctl stop docker

##############基于镜像创建容器并启动
-t(模拟终端)
-i交互式
-d后台运行
dock run -tid   镜像id/name


#############查看所有的创建的容器(包括运行和停止的)
docker ps -a 


#############查看运行的容器
docker ps



############进入容器(当进入之后输出提示符显示容器id而不是虚拟机名称了)
docker attach  镜像id/name
docker exec -it 容器ID /bin/bash

############退出容器
exit       #这种方式退出容器也会停止运行

ctrl +pq      #不停止运行退出,一个一个键按下,不用同时按


############给容器起名字(创建容器的时候)
docker run -tid --name  XXX  镜像id


############启动并进入容器
docker start id/name
docker exec -ti name bash
docker exec -ti 容器名 bash -c "mysql -uroot -p123"
 docker run -d centos /bin/sh -c "while true;do echo 爱滴魔力转圈圈; sleep 1;done"
  -d # 后台运行容器
  /bin/sh # 指定使用centos的bash解释器
  -c # 运行一段shell命令
  "while true;do echo 爱滴魔力转圈圈; sleep 1;done" # 在linux后台,每秒中打印一个 爱滴魔力转圈圈

 
########停止、挂起、恢复容器 
docker stop 容器ID或者名称 
docker pause 容器ID 
docker unpause 容器ID

#########查看容器的信息
docker inspect 容器名称/id


###########基于容器封装成镜像

docker attach id/name   #进入容器

在容器一些操作,安装环境等(的那个鱼给docker增加饿了东西)

docker commit 容器id/name 镜像名称:tag


##########容器间通信
docker run -tid  --name h1 镜像名:tag

docker run -tid --name h2 --link h1 镜像名:tag(和上面的镜像是用一个)

#########删除容器(删除容器之前必须先停止容器)
docker rm 容器名称 -f

#########把导出来的镜像文件还原成镜像状态
docker load --input 文件名称
docker load < 文件名称

#########把镜像封装为文件
docker save -o /文件名.tar 镜像id
docker save  镜像名称 > 新文件名


#######打印docker日志
docker  logs  -f  容器id        # 不间断打印容器的日志信息 

 

三.docker运行后额一些操作

  1.运行一个而UN不能图镜像并且查看版本

#下载一个ubuntu镜像
docker pull ubuntu
#下载完成之后,查看已经下载的ubuntu镜像
docker images
#运行这个ubuntu镜像, 并产生一个容器实例,使用交互模式进入这个容器内部
docker run -it ubuntu /bin/bash
#查看这个ubuntu系统的版本
cat /etc/os-release

  2.运行一个web服务器,并且通过ip+端口访问

#下载webapp
[root@instance-hrnebyqu opt]# docker pull  docker.io/training/webapp 
Using default tag: latest
Trying to pull repository docker.io/training/webapp ... 
latest: Pulling from docker.io/training/webapp

#查看下载下来的镜像
[root@instance-hrnebyqu opt]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
<none>                      <none>              5c4f50b73b1b        About an hour ago   341 MB
docker.io/ubuntu            latest              94e814e2efa8        6 weeks ago         88.9 MB
docker.io/training/webapp   latest              6fae60ef3446        3 years ago         349 MB

#创建容器并且随机指定一个端口 -P参数
[root@instance-hrnebyqu opt]# docker run -d -P 6fae
191bc499334d7251be4ff79810b78f7bf04c59784b6ad763b57176de6d0b5b7b

#查看docker的运行状态
[root@instance-hrnebyqu opt]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
191bc499334d        6fae                "python app.py"     5 seconds ago       Up 4 seconds        0.0.0.0:32768->5000/tcp   mystifying_chandrasekhar
9f1508c46ae5        94e                 "/bin/bash"         About an hour ago   Up About an hour                              heuristic_leakey
0489cd158754        94e8                "/bin/bash"         7 hours ago         Up About an hour                              ubuntumysql

#随机端口 参数是-P


#指定端口运行 参数 -p 是小写的p

[root@instance-hrnebyqu opt]# docker run -tid --name qishi_web -p 9999:5000 6fae
92de5d945f3d483acc79366e37cde33c471bb0821ec5837fb9227833ec3c251f



 

四.镜像的发布

   1.公有仓库

1.docker提供了一个类似于github的仓库dockerhub,
网址https://hub.docker.com/需要注册使用
2.注册docker id后,在linux中登录dockerhub docker login #注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
#这样其实在修改tag后会生生一个新的镜像 语法是: docker tag 镜像名 用户名/仓库名
docker tag image—name tjp40922/centeos
3.推送docker image到dockerhub docker push tjp40922/centos:latest
4.在dockerhub中检查镜像 https://hub.docker.com/
5.删除本地镜像,测试下载pull 镜像文件 docker rmi -f d69 docker pull tjp40922/centos

   2.私有仓库

    但是这种镜像仓库是公开的,其他人也是可以下载,并不安全,因此还可以使用docker registry官方提供的私有仓库

1#官方提供的私有仓库docker registry用法
https://yeasy.gitbooks.io/docker_practice/repository/registry.html

#一条命令下载registry镜像并且启动私有仓库容器
docker pull registry


#私有仓库会被创建在容器的
/var/lib/registry下,因此通过-v参数将镜像文件存储到本地的/opt/data/registry下 端口映射容器中的5000端口到宿主机的5000端口 docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry #检查启动的registry容器 docker ps

#测试连接容器 telnet 192.168.119.10 5000
#修改镜像tag,以docker registry的地址+端口开头
docker tag hello-world:latest 192.168.119.10:5000/hello-world:latest

#查看docker镜像
#Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,这里必须写正确json数据 [root@master /]# vim /etc/docker/daemon.json {   "registry-mirrors": ["http://95822026.m.daocloud.io"],   "insecure-registries":["192.168.119.10:5000"] } #写入到docker服务中,写入到[Service]配置块中,加载此配置文件 #打开docker服务的配置文件:#写入以下内容: #写入的时候,要注意,把这个配置文件加入到[Service]代码块中
vim /lib/systemd/system/docker.service
EnvironmentFile=-/etc/docker/daemon.json
#修改了docker配置文件,重新加载docker systemctl daemon-reload #重启docker systemctl restart docker # 注意,重启docker服务,所有的容器都会挂掉

#重启了docker,刚才的registry容器进程挂掉了,因此重新启动它 docker ps -a docker start registre容器id #推送本地镜像 docker tag docker.io/ubuntu 106.12.112.139:5000/qishi_ubuntu #由于docker registry没有web节目,但是提供了API数据 官网教程:https://docs.docker.com/registry/spec/api/#listing-repositories curl http://192.168.119.10:5000/v2/_catalog
或者浏览器访问http:
//106.12.112.139:5000/v2/_catalog
#删除本地镜像,从私有仓库中下载 docker rmi -f `docker images -aq` docker pull 106.12.112.139:5000/qishi_ubuntu

 

posted @ 2019-04-13 15:45  阿布_alone  阅读(324)  评论(0编辑  收藏  举报
TOP