docker + harbor + python打docker镜像

名词 镜像: docker的本质是进程,可以理解为进程文件, 可以在同一个物理机上,使用一个docker image启动多个容器,每个容器第一次启动的时候会有一个容器id,以后使用这个id启动就可以了

查看当前机器的所有image(repositories.json文件中记录了image的一些信息):   

docker images       

删除image: docker rmi image的id

查找镜像: docker search drone(镜像名称关键字),  注意名称有的格式如: 有的是drone/drone,其中drone/drone和drone是不一样的

 

如何查看容器的日志(停止原因)  docker logs 容器id

1.安装

sudo systemctl start docker (系统重启后也要先启动docker服务进程)

systemctl enable docker 设置开机启动

 

https://www.linuxidc.com/Linux/2019-08/160208.htm

最早的时候docker就是一个开源项目,主要由docker公司维护,moby是继承了原先的docker的项目,是社区维护的的开源项目,谁都可以在moby的基础打造自己的容器产品。docker-ce是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品
docker-ee是docker公司维护的闭源产品,是docker公司的商业产品。

 

2.下载镜像

因为墙,所以还是从国内镜像站点下载吧,比如网易

docker pull hub.c.163.com/library/nginx:latest

设置镜像源

vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

或者阿里镜像源

{
    "registry-mirrors": ["https://iy84qjok.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"],
    "insecure-registries": ["192.168.91.137"]
}


systemctl restart docker.service

3.常用命令

docker ps // 查看所有正在运行容器 

docker stop containerId // containerId 是容器的ID 

docker start  containerId //启动docker

  sudo docker run -i -t ubuntu /bin/bash

后面的 bin/bash什么意思呢? 这是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器就会退出。
这个就表示启动容器后启动bash。

/bin/bash是表示启动容器后运行的进程,我们下载的镜像,有时候目标进程并不是开机自动启动的 

sudo docker run -i -t consul    consul agent  -dev

docker exec -ti -u root 4650e8d1bcca bash 以root身份进入docker

docker ps -a // 查看所有容器

docker ps -a -q // 查看所有容器ID

删除镜像 docker rmi  imagename

删除容器 docker rm 容器id

docker stop $(docker ps -a -q) // stop停止所有容器

docker rm $(docker ps -a -q) // remove删除所有容器

sudo docker rm $(sudo docker ps -qf status=exited) //删除exited状态的容器

docker container update --restart=always 容器名/容器id   //修改成开机自动重启

清理停止的docker, 安全起见,这个命令默认不会删除那些未被任何容器引用的数据卷,如果需要同时删除这些数据卷,你需要显式的指定 --volumns 参数。比如你可能想要执行下面的命令:

$ docker system prune --all --force --volumns 

这次不仅会删除数据卷,而且连确认的过程都没有了!

 

查看容器运行日志 docker logs-查看docker容器日志

3.启动、进入容器

启动容器  docker run -d  -it -p 8080:80 hub.c.163.com/library/nginx  

docker exec -it 775c7c9ee1e1 /bin/bash  (/bin/bash不行的时候就试试/bin/sh)

以root身份进入docker:                  docker run -d  -it   -u root   775c7c9ee1e1 /bin/bash 

容器安装工具

 

4.创建镜像

如果创建镜像的时候没有指定镜像名称,可以可以使用命令:

docker tag [image id] [name]:[版本]

5.查看镜像的详细信息 docker inspect  containerId

返回的json中包含镜像的ip地址,gateway网关,Args和HostConfig属性里可以找到容器当初的启动参数

env 包含了启动的环境变量设置

 

6.docker连外网/设置固定ip

sudo docker network create --subnet=172.18.0.0/24 staticnet

 

查看docker容器ip地址 docker inspect --format='{{.NetworkSettings.IPAddress}}' 镜像名称,如postgres

查看所有容器的ip地址:

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

已经创建了映射,但是外网无法访问端口解决办法:
# vi /etc/sysctl.conf
或者
# vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:
net.ipv4.ip_forward=1  #0-不允许转发  1-允许转发  默认0

service network restart

 

7.docker快速扩展的一个重要特征就是stateless,具有数据状态的都不适合直接放在docker里面,因为如果docker中安装数据库,存储需要单独作为一个数据服务进行提供。目前腾讯的TDSQL和阿里的Oceanbase都直接运行中在物理机器上,都没使用docker。

 

8.修改容器启动参数                
 先查看容器的镜像完整id, 这个id下放了容器相关的文件,"Id": "5328d8acde1c0314c6b5e44a63b21d4a1da456df9d02553fa489c1af45c77b77",
 对应的目录是: /var/lib/docker/containers/5328d8acde1c0314c6b5e44a63b21d4a1da456df9d02553fa489c1af45c77b77/
 修改了这个 config.v2.json文件的env 参数但是重启后,又被覆盖了,这是因为修改之前,一定要先停止docker服务

 

9.创建镜像

方式1: 下载一个centos镜像,

使用docker cp 将文件拷贝到container的目标文件夹下:   docker cp ser e23a95e8a511:/alidata

docker commit -m "注释" e23a95e8a511 新镜像名称

镜像中的进程如果要启动后自动运行,还是要写一个启动shell脚本放到  /etc/profile.d/ 中

在镜像中做了操作,如果要保存,可以重新commit,然后运行新的镜像

方法2: 使用Dockerfile

如创建一个能编译golang代码,在go的工程目录下

#源镜像
FROM golang:latest
#作者
MAINTAINER fish "3232937716@qq.com"
#设置工作目录
WORKDIR $GOPATH/src/nginx-go
#将服务器的go工程代码加入到docker容器中
ADD . $GOPATH/src/nginx-go
#go构建可执行文件
RUN go build .
#暴露端口
EXPOSE 6064
#最终运行docker的命令
ENTRYPOINT  ["./nginx-go"]

执行docker build -t nginx-go:1  .

 

10.docker中安装软件(无法使用vim)

apt-get update
apt-get install vim -y
apt-get install yum -y

apt-get install net-tools

 

11. harbor

https://blog.csdn.net/qq_24095941/article/details/86063684

停止: 在harbor所在的目录   docker-compose stop

开始 : 在harbor所在的目录   docker-compose start

docker 默认是按 https 请求的,由于我搭的私有库是 http 的,所以需要修改 docker 配置,修改为本机的ip,否则外部访问不了harbor的UI
修改 /etc/docker/daemon.json 添加下列信息,"insecure-registries": ["192.168.91.128"]

登录密码,数据库登录密码等在配置文件 harbor.cfg中,默认的web登录账号 admin/ Harbor12345

打tag   其中kubevirt是harbor中创建的仓库名称, mysql是本地下载的一个docker镜像,

docker tag mysql 192.168.91.128/kubevirt/xiaoyu_sql:0.0.1 (其中kubevirt是仓库名)

docker push 192.168.91.128/kubevirt/xiaoyu_sql:0.0.1 

不带版本号0.0.1的话,tag就是latest, 删除的时候直接 docker rmi  mysql 192.168.91.128/kubevirt/xiaoyu_sql, 否则要 mysql 192.168.91.128/kubevirt/xiaoyu_sql:0.0.1

拉取镜像  docker pull   192.168.91.128/kubevirt/xiaoyu_sql:0.0.1, 如果tag是latest,会报错 .........not found: manifest unknown: manifest unknown

docker pull   192.168.91.128/kubevirt/xiaoyu_sql:0.0.1:latest

如果修改了harbor.cfg文件,需要重新,否则其他 docker中的配置还是旧的

  1. 修改完配置文件后,运行 ./prepare,它会哪所配置文件修改一文件
  2. 运行 ./install.sh

 

12. python项目Dockerfile

代码在myapp目录下,myapp和Dockerfile在同一级目录

#!/usr/bin/env python
#coding=utf-8

import logging
import time
logging.basicConfig(level=logging.INFO,
          format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
          datefmt  = '%Y-%m-%d %H:%M:%S',          
          filename='myapp.log',
          filemode='w')
# 定义一个Handler打印INFO及以上级别的日志到sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# 设置日志打印格式
formatter = logging.Formatter('%(asctime)s %(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
# 将定义好的console日志handler添加到root logger
logging.getLogger('').addHandler(console)



if __name__ == '__main__':
    print('start.........')
    while True:
        time.sleep(3)
        #print('test.........')
        logging.info('test.........')
#基于的基础镜像
FROM python:2.7

#代码添加到code文件夹
ADD ./myapp /code

# 设置code文件夹是工作目录
WORKDIR /code

# 安装支持
RUN pip install -r requirements.txt
CMD ["python", "/code/test.py"]

13. --link

      使用link链接的docker之间,可以使用域名直接ping通,会在/ets/hosts文件中添加路由

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值