docker基础用法

  • docker基础用法
  • 什么是docker
  • OCI&OCF
  • OCI
  • OCF
  • docker架构
  • docker镜像与镜像仓库
  • docker对象
  • docker安装
  • 配置镜像
  • docker安装
  • Docker加速
  • 配置阿里云加速
  • docker常用操作
  • 访问前把防火墙关了
  • ip访问


docker基础用法

什么是docker

docker中的容器:

  • lxc --> libcontainer --> runC

docker 安装部署 开源网关kong docker kail_json

OCI&OCF

OCI

Open Container-initiative

  • 由Linux基金会主导于2015年6月创立
  • 旨在围绕容器格式和运行时制定一个开放的工业化标准
  • contains two specifications
  • the Runtime Specification(runtime-spec)
  • the Image Specification(image-spec)

OCF

  • 打开容器格式
    runC是一个CLI工具,用于根据OCI规范生成和运行容器
    —容器作为runC的子进程启动,可以嵌入到其他各种系统中,而无需运行守护进程
    - runC构建在libcontainer之上,同样的容器技术支持数以百万计的Docker Engine安装

docker提供了一个专门容纳容器镜像的站点:https://hub.docker.com

docker架构

docker 安装部署 开源网关kong docker kail_json_02

docker镜像与镜像仓库

为什么镜像仓库名字是Registry而不是repository?在docker中仓库的名字是以应用的名称取名的。

docker 安装部署 开源网关kong docker kail_Docker_03

镜像是静态的,而容器是动态的,容器有其生命周期,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。所以容器是可以删除的,容器被删除后其镜像是不会被删除的。

docker对象

当你使用docker时,你是在创建和使用镜像、容器、网络、卷、插件和其他对象。

镜像

镜像是一个只读模板,带有创建docker容器的说明。

通常,一个镜像是基于另一个镜像,有一些额外的定制。

您可以创建自己的镜像,也可以只使用其他人创建的并在注册表中发布的镜像。

容器

容器是镜像的可运行实例。

可以通过docker API或CLI创建、运行、停止、移动或删除容器。

您可以将一个容器连接到一个或多个网络,将存储附加到它,甚至根据它的当前状态创建一个新的镜像。

docker安装

配置镜像

阿里云镜像网站 :https://developer.aliyun.com/mirror/

//配置阿里云源
[root@localhost ~]# cd /etc/yum.repos.d/

//把国外的源删了
[root@localhost yum.repos.d]# rm -rf *

//查看当前系统
[root@localhost yum.repos.d]# cat /etc/redhat-release
CentOS Stream release 8

[root@localhost yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

//把和阿里云相关的删了
[root@localhost yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

//清除缓存
[root@localhost]# dnf clean all

//下载新repo 到/etc/yum.repos.d/
   epel(RHEL 8)
1)安装 epel 配置包
[root@localhost yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

2)将 repo 配置中的地址替换为阿里云镜像站地址
[root@localhost yum.repos.d]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@localhost yum.repos.d]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

//清除缓存
[root@localhost yum.repos.d]# dnf clean all

//建立缓存
[root@localhost ~]# dnf makecache

docker安装

//AppStream 源和epel源没有docker源
[root@localhost ~]# dnf list all|grep docker

//下载wget和vim
[root@localhost ~]# dnf -y install wget vim

//下载docker源
[root@localhost yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

//建立缓存
[root@localhost ~]# dnf makecache

[root@localhost ~]# dnf list all|grep docker
docker-ce.x86_64           3:20.10.14-3.el8         
省略.......

//安装docker
[root@localhost ~]# dnf -y install docker-ce

//设置开机自启,并立马启动
[root@localhost ~]# systemctl enable --now docker

//查看状态
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled;>
   Active: active (running) since Sun 2022-04-24 19:28:53 CST; 27s >
     Docs: https://docs.docker.com

Docker加速

docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker的加速就是通过配置此文件来实现的。

docker的加速有多种方式:

  • docker cn
  • 中国科技大学加速器
  • 阿里云加速器(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速器)

配置阿里云加速

配置镜像加速器

针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

//往里面写入这一行
[root@localhost ~]# vi /etc/docker/daemon.json
[root@localhost ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://1izcbhll.mirror.aliyuncs.com"]
}

//加载
[root@localhost docker]# systemctl daemon-reload

//重启
[root@localhost docker]# systemctl restart docker

//列出docker信息
[root@localhost ~]# docker info

//查看docker版本号
[root@localhost ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.14
 API version:       1.41
 Go version:        go1.16.15
 Git commit:        a224086
 Built:             Thu Mar 24 01:47:44 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.14
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.15
  Git commit:       87a90dc
  Built:            Thu Mar 24 01:46:10 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.5.11
  GitCommit:        3df54a852345ae127d1fa3092b95168e4a88e2f8
 runc:
  Version:          1.0.3
  GitCommit:        v1.0.3-0-gf46b6ba
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker常用操作

//查找
[root@localhost ~]# docker search seancheng1002/http
NAME                  DESCRIPTION   STARS     OFFICIAL   AUTOMATED
seancheng1002/httpd  

//查找所有带有http的关键字的
[root@localhost ~]# docker search httpd

//列出镜像
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

//默认没有跟版本号拉最新版的httpd
[root@localhost ~]# docker pull httpd
Using default tag: latest
......省略

//列出镜像
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
httpd        latest    dabbfbe0c57b   4 months ago   144MB

//拉httpd2.4.53版本的(指定版本号)
[root@localhost ~]# docker pull httpd:2.4.53

//查看帮助手册
[root@localhost ~]# docker create --help

//创建一个容器叫web
[root@localhost ~]# docker create --name web -p 80:80 httpd
bbfa14882be4b84c64254e1363e27e0490e2905393b07dd95e722cdd61893c0a

//列出容器(ps 列出正在运行的容器)
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED              STATUS    PORTS     NAMES
bbfa14882be4   httpd     "httpd-foreground"   About a minute ago   Created             web

//启动容器
[root@localhost ~]# docker start web
web
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS                               NAMES
bbfa14882be4   httpd     "httpd-foreground"   2 minutes ago   Up 4 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   web

//停止容器web
[root@localhost ~]# docker stop web
web
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

//重启容器(防火墙打开才能启动容器)
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# docker restart web
web
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS         PORTS                               NAMES
bbfa14882be4   httpd     "httpd-foreground"   16 minutes ago   Up 8 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   web

//设置防火墙默认放行端口号(设置放行端口号)
[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=0.0.0.0/0 service name=http accept' --permanent
success

//重新加载
[root@localhost ~]# firewall-cmd --reload
success

//查看
[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	rule family="ipv4" source address="0.0.0.0/0" service name="http" accept

//防火墙不放行规则是访问不了的

//查看日志
[root@localhost ~]# docker logs web
192.168.229.1 - - [24/Apr/2022:12:44:21 +0000] "GET / HTTP/1.1" 304 -
192.168.229.1 - - [24/Apr/2022:12:44:22 +0000] "GET / HTTP/1.1" 304 -
192.168.229.1 - - [24/Apr/2022:12:45:12 +0000] "-" 408 -

//杀死一个或多个运行中的容器
[root@localhost ~]# docker kill web
web
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS                       PORTS     NAMES
bbfa14882be4   httpd     "httpd-foreground"   31 minutes ago   Exited (137) 3 seconds ago             web

//在运行中的容器是不能删的,可以先停掉再删(如果真要在运行中删加上-f)
[root@localhost ~]# docker rm -f web
web
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

//在新容器中运行命令 (-it是交互模式)
[root@localhost ~]# docker run -it --name test busybox /bin/sh
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
5cc84ad355aa: Pull complete 
Digest: sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678
Status: Downloaded newer image for busybox:latest
/ #  ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # 

//连接到运行的容器
[root@localhost ~]# docker start test
test
[root@localhost ~]# docker attach  test  //这种方式进来退出就停掉容器
/ # exit

//在运行的容器中运行命令(就算退出也在运行)
[root@localhost ~]# docker start test
test
[root@localhost ~]# docker exec -it test /bin/sh
/ # exit
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED          STATUS          PORTS     NAMES
6aa2c2b87349   busybox   "/bin/sh"   10 minutes ago   Up 34 seconds             test

访问前把防火墙关了

//关闭防火墙,并开机不自启
[root@localhost ~]# systemctl disable --now firewalld

[root@localhost ~]# vi /etc/selinux/config 
SELINUX=disabled  //把这个改为disabled

[root@localhost ~]# setenforce 0

ip访问

docker 安装部署 开源网关kong docker kail_json_04