0
点赞
收藏
分享

微信扫一扫

docker-学习-6

AbrahamW 2024-03-05 阅读 21

文章目录

docker学习第六天

1. 使用python业务代码构建自己的镜像

第1步:编辑app.py文件,我们的程序文件–》业务的核心代码程序

[root@docker-1 Dockerfile]# mkdir /myapp
[root@docker-1 Dockerfile]# cd /myapp/
[root@docker-1 myapp]# 
[root@docker-1 myapp]# vim app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")  #zhuang'sh
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)
[root@docker-1 myapp]# 

第2步:编辑requirements.txt文件

[root@docker-1 myapp]# vim requirements.txt
Flask
Redis
[root@docker-1 myapp]# pip3 freeze >requirements.txt
[root@docker-1 myapp]# cat requirements.txt 
click==8.0.4
dataclasses==0.8
Flask==2.0.3
importlib-metadata==4.8.3
itsdangerous==2.0.1
Jinja2==3.0.3
MarkupSafe==2.0.1
typing-extensions==4.1.1
Werkzeug==2.0.3
zipp==3.6.0
[root@docker-1 myapp]# 
批量根据requirements.txt文件里的库,开始安装,不需要手工的去指定库名字和版本了,效率比较高
[root@scdocker myapp]# pip3 install -r requirements.txt   


因为我们不是开发者的那台测试环境的电脑,所以我们使用vim直接输入需要的库的名字
[root@sc-docker-server mydocker]# vim requirements.txt
Flask
Redis

编写Dockerfile文件

[root@docker-1 myapp]# cat Dockerfile 
FROM python:2.7-slim
WORKDIR /app
ADD . /app
RUN pip install --trusted-host  pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME World
ENV AUTHOR cali
CMD ["python","app.py"]
[root@docker-1 myapp]# 

第4步:生成镜像文件

[root@docker-1 myapp]# docker build -t scpyweb:1.0 .
镜像名字为scpyweb 版本为1.0
[root@docker-1 myapp]# docker images|grep scpyweb
scpyweb      1.0       5d06099beec8   35 seconds ago   160MB
[root@docker-1 myapp]# 

第5步使用镜像,启动容器

[root@docker-1 myapp]# docker run -d -p 5080:80 --name sc-pyweb-1  scpyweb:1.0
c8ffa1309532bf5856606e2b59f4d703fa208a01c5dde5cf9a72f0b5841d11bb
[root@docker-1 myapp]# 

第6步:访问容器的web服务

3bc94f6bd208eb7b436ace2332080a8

[root@docker-1 myapp]# docker run -d -p 5080:80 --name sc-pyweb-1  scpyweb:1.0
c8ffa1309532bf5856606e2b59f4d703fa208a01c5dde5cf9a72f0b5841d11bb
[root@docker-1 myapp]# docker ps
CONTAINER ID   IMAGE         COMMAND           CREATED         STATUS         PORTS                                   NAMES
c8ffa1309532   scpyweb:1.0   "python app.py"   8 minutes ago   Up 8 minutes   0.0.0.0:5080->80/tcp, :::5080->80/tcp   sc-pyweb-1
[root@docker-1 myapp]# 

第7步: 启动redis容器

[root@docker-1 ~]# docker run -d -p 6379:6379 --name sc-redis-1 redis
5429cac2ac82f11b672817bf65a4aa86c662b733aa47e1ce34cb74c096ccf664
[root@docker-1 ~]# 

第八步: 再次启动一个自己制作镜像的容器,链接到redis容器

[root@docker-1 ~]# docker run -d -p 5082:80 --name sc-pyweb-2 --link sc-redis-1:redis scpyweb:1.0
39405e74a75ad7aa71f8a3b497c5b72dffdf594360b24cf3d3d71992ab1e6c6e
[root@docker-1 ~]# docker ps
CONTAINER ID   IMAGE         COMMAND                   CREATED         STATUS          PORTS                                       NAMES
39405e74a75a   scpyweb:1.0   "python app.py"           8 seconds ago   Up 8 seconds    0.0.0.0:5082->80/tcp, :::5082->80/tcp       sc-pyweb-2

image-20240228160923540

2. docker compose

2.1. 什么是compese

2.2. 试一下

[root@docker-1 docker-mysql]# cat compose.yaml 
services:
  db:
    # We use a mariadb image which supports both amd64 & arm64 architecture
    image: mariadb:10.6.4-focal
    # If you really want to use MySQL, uncomment the following line
    #image: mysql:8.0.27
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  wordpress:
    image: wordpress:latest
    ports:
      - 80:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
volumes:
  db_data:

  
    [root@docker-1 docker-mysql]# 

[root@docker-1 docker-mysql]# docker compose up -d
[root@docker-1 docker-mysql]# docker compose ls
NAME                STATUS              CONFIG FILES
docker-mysql        running(2)          /docker-mysql/compose.yaml
[root@docker-1 docker-mysql]# 

[root@docker-1 docker-mysql]# docker compose ps
NAME                       IMAGE                  COMMAND                   SERVICE     CREATED         STATUS         PORTS
docker-mysql-db-1          mariadb:10.6.4-focal   "docker-entrypoint.s…"   db          5 minutes ago   Up 5 minutes   3306/tcp, 33060/tcp
docker-mysql-wordpress-1   wordpress:latest       "docker-entrypoint.s…"   wordpress   5 minutes ago   Up 5 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp
[root@docker-1 docker-mysql]# 

2.3. 涉及到几个命令

3. docker 私有仓库habor

容器最重要的三个概念

  • 镜像
  • 仓库
  • 容器

3.1. 装一个harbor仓库

'新建harbor文件夹,放进去解压'
[root@docker-1 Dockerfile] mkdir /harbor
[root@docker-1 Dockerfile] cd /harbor/
[root@docker-1 harbor] tar xf harbor-offline-installer-v2.1.0.tgz
[root@docker-1 harbor]# ls
harbor  harbor-offline-installer-v2.1.0.tgz
[root@docker-1 harbor]# cd harbor
[root@docker-1 harbor]# ls
common.sh  harbor.v2.1.0.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare
[root@docker-1 harbor]# cp harbor.yml.tmpl harbor.yml
[root@docker-1 harbor]# 
'修改 harbor.yml 中的hostname和prot 注释掉 https(简化)'

image-20240228223017851

然后拖拽docker compose这个软件进入当前目录,并且加入可执行权限

[root@docker-1 harbor]# chmod +x docker-compose
[root@docker-1 harbor]# cp docker-compose /usr/bin/
[root@docker-1 harbor]# 
'然后执行:'
[root@docker-1 harbor]# ./install.sh 
'查看是否成功'
[root@docker-1 harbor]# docker compose ls
NAME                STATUS              CONFIG FILES
harbor              running(9)          /harbor/harbor/docker-compose.yml
[root@docker-1 harbor]# 
[root@docker-1 harbor]# docker compose ps
NAME                IMAGE                                COMMAND                   SERVICE       CREATED         STATUS                   PORTS
harbor-core         goharbor/harbor-core:v2.1.0          "/harbor/entrypoint.…"   core          5 minutes ago   Up 5 minutes (healthy)   
harbor-db           goharbor/harbor-db:v2.1.0            "/docker-entrypoint.…"   postgresql    5 minutes ago   Up 5 minutes (healthy)   
harbor-jobservice   goharbor/harbor-jobservice:v2.1.0    "/harbor/entrypoint.…"   jobservice    5 minutes ago   Up 5 minutes (healthy)   
harbor-log          goharbor/harbor-log:v2.1.0           "/bin/sh -c /usr/loc…"   log           5 minutes ago   Up 5 minutes (healthy)   127.0.0.1:1514->10514/tcp
harbor-portal       goharbor/harbor-portal:v2.1.0        "nginx -g 'daemon of…"   portal        5 minutes ago   Up 5 minutes (healthy)   
nginx               goharbor/nginx-photon:v2.1.0         "nginx -g 'daemon of…"   proxy         5 minutes ago   Up 5 minutes (healthy)   0.0.0.0:8089->8080/tcp, :::8089->8080/tcp
redis               goharbor/redis-photon:v2.1.0         "redis-server /etc/r…"   redis         5 minutes ago   Up 5 minutes (healthy)   
registry            goharbor/registry-photon:v2.1.0      "/home/harbor/entryp…"   registry      5 minutes ago   Up 5 minutes (healthy)   
registryctl         goharbor/harbor-registryctl:v2.1.0   "/home/harbor/start.…"   registryctl   5 minutes ago   Up 5 minutes (healthy)   
[root@docker-1 harbor]# 

image-20240228224620471

image-20240228224806892

4. 使用harbor

4.1. 在harbor里边创建一个用户

image-20240229114112765

image-20240229114248984

image-20240229114450046

image-20240229114626684

4.2. 传镜像到仓库

[root@docker-2 docker]# cat daemon.json 
 {
    "registry-mirrors": ["https://naxm4z64.mirror.aliyuncs.com"],
    "insecure-registries" : ["192.168.182.166:8089"]
 }
[root@docker-2 docker]# 
[root@docker-2 docker]# systemctl daemon-reload #刷新服务
[root@docker-2 docker]# systemctl restart docker #刷新docker服务
[root@docker-2 docker]# 
[root@docker-2 ~]# docker tag scpyweb:1.0 192.168.182.166:8089/sanchuang/scpyweb:1.0
[root@docker-2 ~]# docker images
REPOSITORY                               TAG       IMAGE ID       CREATED        SIZE
192.168.182.166:8089/sanchuang/scpyweb   1.0       5d06099beec8   41 hours ago   160MB
scpyweb                                  1.0       5d06099beec8   41 hours ago   160MB
nginx                                    latest    605c77e624dd   2 years ago    141MB
[root@docker-2 ~]# 

登录私有仓库

[root@docker-2 ~]# docker login 192.168.182.166:8089
Username: gao
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@docker-2 ~]# 

推镜像

[root@docker-2 ~]# docker push 192.168.182.166:8089/sanchuang/scpyweb:1.0
The push refers to repository [192.168.182.166:8089/sanchuang/scpyweb]
cb74c9fb387b: Pushed 
e93d0cb48f75: Pushed 
8c1272e2c660: Pushed 
7a287aad297b: Pushed 
7ea2b60b0a08: Pushed 
568944187d93: Pushed 
b60e5c3bcef2: Pushed 
1.0: digest: sha256:6c6d2510b6dd32583c27d4e69ffaf8ca2c0bfcdcb34cc6232987b0a9c854db87 size: 1788
[root@docker-2 ~]# 

image-20240229125259192

'试试'
[root@docker-2 ~]# docker tag busybox:latest 192.168.182.166:8089/sanchuang/busybox:latest
[root@docker-2 ~]# docker push 192.168.182.166:8089/sanchuang/busybox
Using default tag: latest
The push refers to repository [192.168.182.166:8089/sanchuang/busybox]
01fd6df81c8e: Pushed 
latest: digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee size: 527
[root@docker-2 ~]# 
[root@docker-2 ~]# docker pull 192.168.182.166:8089/sanchuang/busybox 
Using default tag: latest
latest: Pulling from sanchuang/busybox
Digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee
Status: Downloaded newer image for 192.168.182.166:8089/sanchuang/busybox:latest
192.168.182.166:8089/sanchuang/busybox:latest
[root@docker-2 ~]# docker images
REPOSITORY                               TAG       IMAGE ID       CREATED        SIZE
192.168.182.166:8089/sanchuang/scpyweb   1.0       5d06099beec8   41 hours ago   160MB
scpyweb                                  1.0       5d06099beec8   41 hours ago   160MB
192.168.182.166:8089/sanchuang/busybox   latest    beae173ccac6   2 years ago    1.24MB
busybox                                  latest    beae173ccac6   2 years ago    1.24MB
nginx                                    latest    605c77e624dd   2 years ago    141MB
[root@docker-2 ~]# 
[root@docker-2 ~]# docker run -it --rm --name mybusybox-1 192.168.182.166:8089/sanchuang/busybox
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # 

5. docker容器的监控

5.1. 监控的意义是什么

5.2. 监控什么东西?

5.3. 监控的全能命令

  • dstat
  • glances
[root@docker-1 ~]# dstat -am
Terminal width too small, trimming output.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-->
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw >
  0   0 100   0   0   0|  46k  149k|   0     0 |   3B   15B| 358   575 >
  0   0 100   0   0   0|   0     0 |2618B 3456B|   0     0 | 383   534 >
  0   0 100   0   0   0|   0     0 |9012B 9298B|   0     0 | 482   705 >^C
[root@docker-1 ~]# 

举报

相关推荐

0 条评论