Docker

本文详细介绍了Docker的基本组成,包括镜像、容器和仓库,以及Docker在阿里云上的安装和卸载。还涵盖了Docker的常用命令,如镜像管理、容器操作,并演示了如何部署MySQL、Tomcat和Minio。此外,讨论了Docker网络配置和自定义网络,以及解决Docker报错的方法。
摘要由CSDN通过智能技术生成

——Docker——

Docker基本组成

Docker基本组成

镜像(image):

容器(container):

仓库(registry):

Docker安装

环境查看

#系统内核
[root@localhost ~]# uname -r
#系统版本
[root@localhost ~]# cat /etc/os-release

安装Docker

卸载旧版本

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

使用Docker仓库进行安装

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。

#安装所需的软件包。
$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

使用以下命令来设置稳定的仓库。

#阿里云
$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#清华大学源
$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

安装 Docker Engine-Community

$ sudo yum install docker-ce docker-ce-cli containerd.io

启动Docker

$ sudo systemctl start docker

运行镜像来验证是否正确安装了 Docker Engine-Community

$ sudo docker run hello-world
#查看镜像
[root@localhost ~]# docker images

卸载Docker

# 删除安装包
[root@localhost ~]# yum remove docker-ce
# 删除镜像、容器、配置文件等内容
[root@localhost ~]# rm -rf /var/lib/docker

阿里云镜像加速

[root@localhost ~]# sudo mkdir -p /etc/docker
[root@localhost ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://tqku2lxe.mirror.aliyuncs.com"]
}
EOF
[root@localhost ~]# sudo systemctl daemon-reload
[root@localhost ~]# sudo systemctl restart docker

Docker run的运行流程

在这里插入图片描述

Docker常用命令

帮助命令

docker version	#显示docker的版本信息
docker info		#显示docker的系统信息,包括镜像和容器的数量
docker --help	#帮助命令

服务命令

systemctl start docker		#启动docker服务
systemctl stop docker		#停止docker服务
systemctl restart docker	#重启docker服务
systemctl status docker		#查看docker服务状态
systemctl enable docker		#设置开机启动docker服务

—镜像命令—

docker images 查看所有本地的主机上的镜像

[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB

#解释
REPOSITORY	镜像的仓库源
TAG 		镜像的标签
IMAGE ID	镜像的id
CREATED		镜像的创建时间
SIZE		镜像的大小

#可选参数
Options:
  -a, --all             # 列出所有镜像
  -q, --quiet           # 只显示镜像id

docker search 搜索镜像

[root@localhost ~]# docker search mysql
NAME                             DESCRIPTION                                     STARS    OFFICIAL AUTOMATED
mysql                            MySQL is a widely used, open-source relation…   12431     [OK]       
mariadb                          MariaDB Server is a high performing open sou…   4790      [OK]       
mysql/mysql-server               Optimized MySQL Server Docker images. Create…   918                  [OK]
percona                          Percona Server is a fork of the MySQL relati…   575       [OK]       
phpmyadmin                       phpMyAdmin - A web interface for MySQL and M…   509       [OK]
...

#解释
NAME			镜像仓库源的名称
DESCRIPTION		镜像的描述
STARS			
OFFICIAL		镜像是否由docker官方发布
AUTOMATED		自动构建

#可选参数,通过收藏来过滤
Options:
  --filter=STARS=3000		# 过滤出收藏数大于3000的镜像 

docker pull 下载镜像

#下载镜像 docker pull 镜像名:tag(版本号)
[root@localhost ~]# docker pull mysql
Using default tag: latest		# 如果不写tag,默认为latest
latest: Pulling from library/mysql
f003217c5aae: Pull complete 	# 分层下载,docker image的核心 联合文件系统
65d94f01a09f: Pull complete 
43d78aaa6078: Pull complete 
a0f91ffbdf69: Pull complete 
59ee9e07e12f: Pull complete 
04d82978082c: Pull complete 
70f46ebb971a: Pull complete 
db6ea71d471d: Pull complete 
c2920c795b25: Pull complete 
26c3bdf75ff5: Pull complete 
9ec1f1f78b0e: Pull complete 
4607fa685ac6: Pull complete 
Digest: sha256:1c75ba7716c6f73fc106dacedfdcf13f934ea8c161c8b3b3e4618bcd5fbcf195	# 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest	# 真实地址

docker rmi 删除镜像

[root@localhost ~]# docker rmi -f IMAGE ID					#删除指定镜像
[root@localhost ~]# docker rmi -f $(docker images -aq)		#删除全部镜像

——容器命令——

说明:有了镜像才可以创建容器

[root@localhost ~]# docker pull centos 

docker run 新建容器

[root@localhost ~]# docker run [可选参数] REPOSITORY:TAG 

#参数说明
  --name Name		# 为容器创建名字,为Name,用来区分容器
  -i				# 保持容器运行
  -d				# 后台模式运行容器,需要使用docker exec进入容器,exit退出后,容器不关闭
  -p 3355:8080		# 暴露端口,将容器外部的3355端口给容器内部的8080做一个映射,就可以通过外部的3355就能访问8080的内容
  -it				# 创建交互式容器,创建后自动进入容器中,exit退出容器后,容器自动关闭



# 退出容器 exit	报错There are stopped jobs.
[root@837ada2549cc /]# jobs -l
[1]+    15 Stopped                 ping www.baidu.com
[root@837ada2549cc /]# kill %1
[1]+  Stopped                 ping www.baidu.com
[root@837ada2549cc /]# jobs -l
[1]+    15 Terminated              ping www.baidu.com
[root@837ada2549cc /]# exit
exit
[root@localhost ~]#

docker ps 查看容器

[root@localhost ~]# docker ps [可选参数]
CONTAINER ID



#解释


#参数说明
  -a				#查看所有容器

docker exec 进入容器

[root@localhost ~]# docker exec -it NAME /bin/bash

docker stop 停止容器

[root@localhost ~]# docker stop CONTAINER ID/NAMES

docker start 启动容器

[root@localhost ~]# docker start CONTAINER ID/NAMES

docker rm 删除容器

[root@localhost ~]# docker rm CONTAINER ID			# 删除指定容器
[root@localhost ~]# docker rm -f $(docker ps -aq)	# 删除所有容器

查看指定容器的ip地址

[root@localhost ~]# docker inspect CONTAINER ID | grep IPAddress

查看下载容器信息

[root@localhost ~]# docker logs CONTAINER ID

!注意:


操作命令

——Docker应用部署——

部署MySQL

搜索

拉取

创建容器,设置端口映射,目录映射

mkdir mysql
cd mysql
docker run -id \
	-p 3307:3306 \	#将容器的3306端口映射到宿主机的3307端口
	--name=		\
	-v $PWD/conf:/etc/mysql/conf.d \	#conf 配置目录,将宿主机当前目录下的conf目录挂载到容器/etc/mysql/conf.d目录
	-v $PWD/logs:logs \	#logs 日志目录,将宿主机当前目录下的logs目录挂载到容器logs目录
	-v $PWD/data:/var/lib/mysql \	#data 数据目录,将宿主机当前目录下的data目录挂载到容器/var/lib/mysql目录
	-e MYSQL_ROOT_PASSWORD=		\	#初始化root用户的密码
	mysql:TAG

部署tomcat

下载

[root@localhost ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
0e29546d541c: Pull complete 
9b829c73b52b: Pull complete 
cb5b7ae36172: Pull complete
6494e4811622: Pull complete 
668f6fcc5fa5: Pull complete 
dc120c3e0290: Pull complete 
8f7c0eebb7b1: Pull complete 
77b694f83996: Pull complete 
0f611256ec3a: Pull complete 
4f25def12f23: Pull complete 
Digest: sha256:9dee185c3b161cdfede1f5e35e8b56ebc9de88ed3a79526939701f3537a52324
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest

创建容器并运行

[root@localhost ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat
deca8a17fd09776666adb8e93bdec6751ecaadb466f440d1243d50126ac1b5f6

# 参数说明
  -d					# 后台运行
  -p 3355:8080			#
  --name tomcat01		#

进入

[root@localhost ~]# docker exec -it tomcat01 /bin/bash
# 测试
root@deca8a17fd09:/usr/local/tomcat# cp -r webapps.dist/* webapps

# 访问tomcat
http://192.168.88.128:3355/

退出容器

root@deca8a17fd09:/usr/local/tomcat# exit
exit

搭建minio

拉取镜像

[root@localhost ~]# docker pull minio/minio

创建Minio外部挂载的配置文件和存储上传文件的目录

[root@localhost ~]# mkdir -p /docker/minio/config
[root@localhost ~]# mkdir -p /docker/minio/data

创建minio容器并运行

docker run -p 9000:9000 \ # 将容器的9000端口映射到宿主机的9000端口
	--name minio \
	-d --restart=always \ # 保证每次docker服务重启后容器也自动重启
    -e "MINIO_ACCESS_KEY=minio" \ # 账号长度必须大于等于5
    -e "MINIO_SECRET_KEY=12345678" \ # 密码长度必须大于等于8位
    -v /docker/minio/data:/data \
    -v /docker/minio/config:/root/.minio \
    minio/minio server \ 
    /data # --console-address ":9090" -address ":9000"

查看

[root@localhost ~]# docker ps -a
[root@localhost ~]# docker logs CONTAINER ID

访问
console ip

Docker镜像

容器数据卷

DockerFile

DockerFile

Docker网络

linux 可以ping通 docker容器内部

原理

1.每启动一个docker容器,docker就会给docker容器分配一个ip,只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术

evth-pair技术就是一对虚拟设备接口,一端连接协议,一端彼此相连

evth-pair充当桥梁,连接各种虚拟网络设备

容器与容器之间是可以互相ping通

自定义网络

容器互联

docker network --help

# 可选参数
Options:
  -connect			# 连接一个容器到一个网络
  -create
  -inspect			# 
  -ls				#
  -rm
  
# 查看所有的docker网络 
[root@localhost ~]# docker network ls
NETWORK ID     NAME                  DRIVER    SCOPE
751a808661e2   bridge                bridge    local
4d30468b497e   host                  host      local
9d32359065d7   none                  null      local

# 解释
NETWORK ID
NAME
DRIVER
SCOPE

网络模式

bridge:桥接 docker(默认)

none:不配置网络

host:和宿主机共享网络

container:容器网络连通(用的少,局限很大)

# 直接启动容器有个默认的命令 --net bridge,这就是docker0
[root@localhost ~]# docker run -d -P -- name tomcat01 tomcat
[root@localhost ~]# docker run -d -P -- name tomcat01 --net bridge tomcat

# docker0特点:默认,域名不能访问, --link可以打通连接,但不能反向连通

# 自定义一个网络
# --driver bridge
# --subnet 192.168.0.0/16
# --gateway 192.168.0.1
[root@localhost ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

# 可选参数
Options:
  --driver
  --subnet		# 子网			
  --gateway		# 网关

网络连通

# 内部
[root@localhost ~]# docker network connect mynet tomcat01

# 将tomcat01 放到了 mynet 网络下
# 一个容器两个ip地址,例如:阿里云服务 公网ip 私网ip


# 可选参数
Options:
  --

在这里插入图片描述

IP地址子网
主机1192.168.145.128主机1的docker0172.17.1.0/24
主机2192.168.145.129主机2的docker0172.17.2.0/24

分别对主机1和主机2上的docker0进行配置

[root@localhost ~]# vim /etc/docker/daemon.json

#主机1
{
  "bip": "172.17.1.252/24"
}

#主机2
{
  "bip": "172.17.2.252/24"
}

**!注意:**配置完记得重启docker网络服务

[root@localhost ~]# systemctl restart docker

添加路由规则

#主机1
[root@localhost ~]# route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.145.129

#主机2
[root@localhost ~]# route add -net 172.17.1.0 netmask 255.255.255.0 gw 192.168.145.128

配置iptables规则

#主机1
[root@localhost ~]# iptables -t nat -F POSTROUTING
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE

#主机2
[root@localhost ~]# iptables -t nat -F POSTROUTING
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j MASQUERADE

启动容器

IDEA整合Docker

Docker Compose

Docker Swarm集群部署

Docker报错处理

Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details.

WARNING:IPv4 forwarding is disabled. Networking will not work.

# 配置转发
[root@localhost ~]# vi /etc/sysctl.conf

# 添加net.ipv4.ip_forward=1

# 重启网络服务
[root@localhost ~]# systemctl restart network

[root@localhost ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

# 重启docker服务
[root@localhost ~]# service docker restart

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1”: dial unix /var/run/docker.sock: connect: permission denied

# 查看docker用户组
[root@localhost ~]# grep 'docker' /etc/group
# 将当前用户添加至docker用户组	
[root@localhost ~]# sudo gpasswd -a $USER docker
# 更新docker用户组
[root@localhost ~]# newgrp docker 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值