1、简介

Docker 是一个开源的应用容器引擎;

​ Docker支持将软件编译成一个镜像,然后在镜像中的各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。

​ 运行中的在这个镜像称为容器,容器启动是非常快速的。

2、核心概念

docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上)

docker客户端(Client):连接docker主机镜像操作

docker仓库(Registry):用来保存各种打包好的软件镜像

docker镜像(Images):软件打包好的镜像,放在docker仓库中

docker容器(Container):镜像启动后的实例称为一个容器,容器是独立运行的一个或一组应用

使用Docker的步骤:

1、安装Docker

2、去Docker仓库去找到要安装的软件对应的镜像

3、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器

4、对容器的启动停止就是对这个软件的启动停止

安装Docker

1、检查内核版本,3.10及以上

uname -r

2、安装Docker

apt-get -y install docker

3、启动Docker

systemctl start docker

4、检查版本

docker -v

5、设置开机启动

systemctl enable docker

6、停止Docker

systemctl stop docker

Docker基本操作

1、搜索镜像,比如搜索mysql(会从 Docker Hub 中搜索 http://hub.docker.com

docker search mysql

2、下载镜像

#默认下载latest版本
docker pull mysql 

#指定版本下载
docker pull mysql:5.5

3、查看docker中有多少镜像

docker images

4、删除指定镜像

docker rmi 加上imageId

Docker容器操作

​ 软件镜像(QQ的安装程序)----> 运行镜像(运行安装程序)----> 产生一个容器(运行的QQ)

步骤:

​ 1、搜索镜像

docker search tomcat

​ 2、拉取镜像

docker pull tomcat

​ 3、根据镜像启动容器

docker run --name mytomcat -d tomcat:latest

注意:mysql 不可以此方式启动,会异常退出 正确启动方式见下方

​ 4、查看运行中的容器

docker ps 

​ 5、停止运行中的容器

docker stop 名字 或 CONTAINERID(容器的id)
#例如
docker stop dec70e978492
#或
docker stop mytomcat

​ 6、查看所有的容器(运行的和退出的)

docker ps -a

​ 7、重新启动容器

docker start dec70e978492  (容器id) 
#或
docker start mytomcat (名字)

​ 8、删除容器(删除的容器必须是停止状态)

docker rm dec70e978492(容器id)
#或
docker rm mytamcat(名字)

​ 9、启动容器并配置端口映射

docker run -d -p 8888:8080 tomcat

-d:后台运行

-p:将主机端口映射到容器的一个端口 (主机端口:容器内部的端口)

​ 启动之后,浏览器访问 ip:8888 即可访问容器中的 8080 端口

​ 查看防火墙状态:

service firewalld status

​ 关闭防火墙:

service firewalld stop

11、查看容器的日志

docker logs ce5a33d06152(容器id)
#或
docker logs mytomcat(名字)

12、一个镜像可以启动多个容器
使用一个镜像启动三个独立运行的容器(互不干扰)

docker run -d -p 8887:8080 tomcat 
docker run -d -p 8888:8080 tomcat 
docker run -d -p 8889:8080 tomcat 

docker 安装&redis挂载外部配置和数据&配置密码 一气呵成

docker run -d --privileged=true \
-p 6379:6379 \
--restart always \
-v ~/docker-data-test/redis/conf/redis.conf:/etc/redis/redis.conf \
-v ~/docker-data-test/redis/data:/data \
--name myredis redis redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass "123456" 

参数解释:

-d                                                  				-> 以守护进程的方式启动容器
-p 6379:6379                                        				-> 绑定宿主机端口
--name myredis                                     				-> 指定容器名称
--restart always                                    				-> 开机启动
--privileged=true                                   				-> 提升容器内权限
-v ~/docker-data-test/redis/conf/redis.conf:/etc/redis/redis.conf   		-> 映射配置文件
-v ~/docker-data-test/redis/data:/data                   			-> 映射数据目录
--appendonly yes                                    				-> 开启数据持久化
--requirepass									-> 密码

Docker中网络不通报错:WARNING: IPv4 forwarding is disabled. Networking will not work解决

上面创建redis容器时报错:WARNING: IPv4 forwarding is disabled. Networking will not work.

查看容器的警告信息:

[root@localhost ~]# docker info    //有警告信息
......
WARNING: IPv4 forwarding is disabled
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

解决办法:

1.编辑配置文件 /etc/sysctl.conf

vim /etc/sysctl.conf

  新增以下内容:

net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-arptables=1
net.ipv4.ip_forward=1

2、重启网络配置

systemctl restart network

3、再次查看docker info,已无警告信息

[root@localhost ~]# docker info
......
Live Restore Enabled: false

4、重新创建容器,也再无ipv4转发问题警告信息

 

Docker进入一个已经在运行的容器

docker exec -it 775c7c9ee1e1 /bin/bash  

【Docker】之查看 Docker 容器启动命令参数

1、安装 pip3 命令

Linux 一般都默认安装了 Python 2,而 Python2 就附带了 pip 命令,但 2 版本的 pip 经常在安装包的时候出错,所以建议安装 Python3

yum install python3-pip

查看版本:

 pip3 -V

2、安装 runlike 命令

pip3 install runlike

3、查看 docker run 命令参数

格式:runlike -p <容器名>|<容器ID>

runlike -p redis

docker run \
        --name=redis \
        --hostname=414be3b97fb6 \
        --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
        --env=GOSU_VERSION=1.12 \
        --env=REDIS_VERSION=6.2.6 \
        --env=REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-6.2.6.tar.gz \
        --env=REDIS_DOWNLOAD_SHA=5b2b8b7a50111ef395bf1c1d5be11e6e167ac018125055daa8b5c2317ae131ab \
        --volume=/data \
        --privileged \
        --workdir=/data \
        -p 6379:6379 \
        --restart=always \
        --log-driver=journald \
        --runtime=docker-runc \
        --detach=true \
        redis \
        redis-server /etc/redis/redis.conf

Docker 停止/删除所有容器

1、停止所有容器

docker stop $(docker ps -aq)

2、删除所有停止的容器

docker container prune