Docker安装部署及镜像制作--从入门到实战(持续更新......)

1,部署方式

1.1,centos安装docker

## 更新yum源
yum update
##安装最新软件包,yum-utils 提供yum-config-manager功能,
yum install -y yum-utils device-mapper-persistent-data lvm2
##设置yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
##安装 Docker
yum install docker-ce docker-ce-cli containerd.io
##查看docker版本,验证是否部署成功
docker -v
##启动docker
systemctl enable docker
systemctl start docker

1.2,window10安装docker

安装部署参考如下官网:Docker–从入门到实战官网
https://yeasy.gitbook.io/docker_practice/image/pull
若安装过程中出现报错,从此网站中下载 wsl.msi 文件
https://czf-net.xyz/res/

2,docker基本概念

2.1,Docker 包括三个基本概念

  • 镜像(Image),就相当于是一个 root 文件系统,构建就不会被改变,分层构建。
  • 容器(Container),镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。实质就是进程,运行于属于自己的独立命名空间,自身就是一套独立的环境。容器运行以镜像为基础层,在其上创建一个当前容器的存储层用来存储容器运行读写的数据,容器存储层的生命周期和容器一样,随容器消亡而亡。容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
  • 仓库(Repository)集中的存储、分发镜像的服务。一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。<仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

3,Docker服务相关命令

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

4,Docker镜像相关命令

官方镜像仓库https://hub.docker.com/

## 查看docker镜像
docker images
## 查看docker所有镜像id
docker images -q
## 搜索docker hub是否存在镜像 eg: redis
docker search redis
## 拉取镜像
docker pull redis ## 后面不接tag版本号,则默认下载最新的latest版本
docker pull redis:5.0 ## 后面接tag版本号,则拉取指定版本
## 删除镜像
docker rmi <IMAGE ID>
docker rmi <REPOSITORY:TAG>
## 删除所有镜像,不要轻易使用
docker rmi `docker images -q`

5,Docker容器相关命令

5.1,创建容器一

## 查看镜像
[root@localhost local] docker images
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
mysql        5.7       9f35042c6a98   About an hour ago   448MB
centos       7         eeb6ee3f44bd   12 days ago         204MB
redis        latest    02c7f2054405   3 weeks ago         105MB
## 创建容器一,
## 参数说明
# i-容器保持一直运行 
# t-给容器分配终端,输入命令 
# d-后台运行容器
# -it 创建交互式容器,自动进入容器,退出容器,关闭容器
# -id 创建守护式容器,需使用docker exec 进入容器,退出不会关闭容器
# name-给容器起名字
# /bin/bash相当于打开shell窗口脚本
[root@localhost local] docker run -it --name=csd centos:7 /bin/bash
[root@7589d20a533a /] ls
## 退出容器
[root@7589d20a533a /] exit 
exit
## 查看运行的容器
[root@localhost local] docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
## 查看所有容器
[root@localhost local] docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS                      PORTS     NAMES
7589d20a533a   centos:7   "/bin/bash"   11 minutes ago   Exited (0) 10 minutes ago             csd
## 

5.2,创建容器二

## 创建容器 后台运行
[root@localhost local] docker run -id --name=c2 centos:7
c1e408d83b5146210a175618feac91cde45ccbad2f01a9d5e6e7f7307169074c
## 进入容器一
[root@localhost local] docker exec -it c2 /bin/bash
[root@c1e408d83b51 /] ll
## 进入容器二
docker attach 容器名称

5.3,启动,停止,删除容器

## 查看所有容器
[root@localhost local] docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS                      PORTS     NAMES
c1e408d83b51   centos:7   "/bin/bash"   21 minutes ago   Up 21 minutes                         c2
7589d20a533a   centos:7   "/bin/bash"   40 minutes ago   Exited (0) 39 minutes ago             csd
## 停止容器
[root@localhost local] docker stop c2
c2
## 启动容器
[root@localhost local] docker start c2
c2
## 删除容器
[root@localhost local] docker rm csd
csd
## 查看所有容器id
[root@localhost local] docker ps -q
c1e408d83b51
## 删除所有容器
[root@localhost local] docker rm `docker ps -qa`
## 查看容器信息
[root@localhost local] docker inspect c2

6,Docker容器数据卷

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷 可以在容器之间共享和重用
  • 对 数据卷 的修改会立马生效
  • 对 数据卷 的更新,不会影响镜像
  • 数据卷 默认会一直存在,即使容器被删除

数据卷是宿主机中的一个目录或文件。当容器目录和数据卷目录绑定之后,对方的修改会立即同步。
数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

挂载数据卷命令
注意事项:
1,目录必须是绝对路径
2,如果目录不存在,则会创建
3,一个容器可以挂载多个数据卷
4,多个容器可以挂载同一个数据卷,实现数据共享

方式一:

## -v 指定数据卷绝对路径所在目录,格式如<宿主机绝对路径:容器绝对路径>
## 若无当前目录,会自动创建
docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash

## 容器目录
[root@26db58674ca4 ~] ll
-rw-------. 1 root root 3416 Nov 13  2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Sep 30 06:25 data_container
## 宿主机数据卷目录
[root@localhost ~] ll
-rw-------. 1 root root 2763 Aug 18 19:55 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Sep 29 23:25 data

方式二:

## 一个容器可以挂载多个数据卷, \ 可以换行
[root@localhost ~] docker run -it --name=c2 \
> -v ~/data2:/root/data2 \
> -v ~/data3:/root/data3 \
> centos:7
[root@931d6c0d19a3 /] ll
[root@931d6c0d19a3 /] cd ~
[root@931d6c0d19a3 ~] ll
total 4
-rw-------. 1 root root 3416 Nov 13  2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Sep 30 07:14 data2
drwxr-xr-x. 2 root root    6 Sep 30 07:14 data3

7,启动容器报错

docker容器启动报:WARNING: IPv4 forwarding is disabled. Networking will not work.

[root@localhost ~]# docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash
WARNING: IPv4 forwarding is disabled. Networking will not work.

启动镜像,发现没有网络,而且不能ifconfig,因为没有开启转发,网桥配置完后,需要开启转发,不然容器启动后,就会没有网络,配置/etc/sysctl.conf,添加net.ipv4.ip_forward=1

配置转发

vim /etc/sysctl.conf

#配置转发
net.ipv4.ip_forward=1

#重启服务,让配置生效
systemctl restart network

#查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功

sysctl net.ipv4.ip_forward

检查容器是否正常访问网络

#重启docker服务
service docker restart 

#查看运行过的容器
docker ps -a

#启动容器
docker start c1

#进入容器
docker attach c1

#获取百度信息
curl www.baidu.com

8,Docker数据卷容器

Docker安装部署及镜像制作--从入门到实战(持续更新......)_第1张图片

8.1,配置数据卷容器

1,创建启动c3数据卷容器,使用 -v 参数设置数据卷**

docker run -it --name=c3 -v /volume centos:7 /bin/bash

2,创建启动c1,c2容器,使用 --volumes-from 参数<容器名称> 设置数据卷

docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

你可能感兴趣的:(docker,centos,linux)