注:操作系统环境:CentOS 7.x

1、附加知识点:

使用国内Docker镜像源加速:

由于众所周知的原因,从国内网络访问境外服务器取资源经常速度慢,甚至时不时抽风取不到资源。所以为了提升工作效率,我们一般会从国内镜像资源站来获取资源,下面我们讲一下修改Docker镜像服务器的方法:

cat <<-ENDDOCKER > /etc/docker/daemon.json
{
    "registry-mirrors": ["http://f1361db2.m.daocloud.io"],
    "log-opts": {
       "max-size": "20m",
       "max-file": "10"
    }
}
ENDDOCKER
systemctl daemon-reload
systemctl restart docker


宿主机防火墙配置:

#查看防火墙服务工作状态

firewall-cmd --state

#启动防火墙

systemctl start firewalld

#关闭防火墙

systemctl stop firewalld

#重启防火墙

systemctl restart firewalld

#禁用防火墙

systemctl disable firewalld

#启用防火墙

systemctl enable firewalld

#开放范围端口

firewall-cmd --permanent --add-port=8080-8085/tcp

#移除范围端口

firewall-cmd --permanent --remove-port=8080-8085/tcp

#开放特定端口

firewall-cmd --permanent --add-port=8080/tcp

#移除特定端口

firewall-cmd --permanent --remove-port=8080/tcp

#重新加载防火墙设置

firewall-cmd --reload

#查看防火墙开放端口列表

firewall-cmd --permanent --list-ports

#查看哪些程序在使用互联网

firewall-cmd --permanent --list-services


2、Docker命令操作说明:


#Docker服务启动、停止、重启

systemctl start docker
systemctl stop docker
systemctl restart docker

#从Docker镜像仓库搜索镜像

docker search 镜像名

docker search java


#拉取镜像

docker pull 镜像名

docker pull java


#显示本机所有镜像

docker images


#导出镜像

docker save 镜像名 > 输出镜像包名

docker save -o 输出镜像包名 镜像名

docker save java > /opt/java.tar


#导入镜像

docker load < 要导入的镜像包名

docker load -i 要导入的镜像包名

docker load < /opt/java.tar


#删除镜像

docker rmi 要删除的镜像名

docker rmi java


#镜像改名

docker tag 原镜像名 新镜像名

docker tag java java1


#创建并启动容器

//启动容器并进入容器命令控制台

docker run -it 镜像名 bash

docker run -it java bash


#创建一个带别名的容器

docker run -it --name 容器别名 镜像名 bash

docker run -it --name myjava java bash


#创建以后台方式运行的容器

上面启动的容器,在容器启动后直接进入容器命令控制台,退出容器,容器即停止工作,可以用-d参数指定容器以后台方式运行。

docker run -it -d --name 容器别名 镜像名

docker run -it -d --name myjava java


#进入以后台方式运行的容器

docker exec -it 容器别名/容器ID bash

docker exec -it myjava bash


#端口映射

docker run -it -p 宿主机端口号:容器服务端口号 镜像名

docker run -it -d --name myjava -p 9000:8080 -p9001:8085 java


#把容器所有端口直接映射到宿主机(--net=host )

docker run -it -d --net=host 镜像名

docker run -it -d --name myjava --net=host java


#目录映射(--privileged具有目录的读写权限)

docker run -it -d -v 宿主机目录:容器目录 --privileged java

docker run -it -d --name myjava -v /opt/project:/soft --privileged java


#创建docker数据卷

docker volume create --name 卷名

docker volume create --name app_data

#查看数据卷信息

docker inspect app_data

#删除数据卷

docker volume rm app_data

#数据卷映射(--privileged具有目录的读写权限)

docker run -it -d -v 数据卷名:容器目录 --privileged java

docker run -it -d --name myjava -v app_data:/soft --privileged java


#暂停容器

docker pause 容器别名/容器ID

docker pause myjava

#恢复暂停运行

docker unpause 容器别名/容器ID

docker unpause myjava

#停止容器

docker stop 容器别名/容器ID

docker stop myjava


#启动已停止容器

docker start 容器别名/容器ID

docker start myjava


#查看容器信息

docker inspect myjava


#删除容器(删除前必需先停止容器,未停止的容器可以使用-f强制删除参数)

docker stop 容器别名/容器ID

docker rm 容器别名/容器ID

或者直接:docker rm -f 容器别名/容器ID

docker stop myjava
docker rm myjava
#OR
docker rm -f myjava


#创建容器虚拟网络(指定虚拟网子网范围可以使用参数:--subnet)

docker network create 网络名称

docker network create testnet
docker network create --subnet=172.18.0.0/24 testnet
docker network create --subnet=172.16.0.0/24 testnet1

#指定容器运行虚拟网络及配置固定IP

docker run -it -d --name myjava --net=testnet --ip 172.18.0.2 java


#查看虚拟网信息

docker network inspect 虚拟网络名

docker network inspect testnet

#删除虚拟网

docker network rm 虚拟网络名

docker network rm testnet


#为容器限定内存及CPU资源

-m参数限定容器占用内存大小,如-m 512m、-m 1g

--cpuset-cpus参数可以指定一个特定核心、不连续多个核心、连续多个核心,表示方法分别为:

一个特定核心:--cpuset-cpus="0"或--cpuset-cpus="1"或--cpuset-cpus="4"

不连续多个核心:--cpuset-cpus="0,2,4"

连续多个核心:--cpuset-cpus="1-4"

docker run -it -d --name myjava -m 512m --cpuset-cpus="0-3" java


#Docker容器停止后自动重启

使用--restart=always参数可以保证容器意外退出时让Docker守护进程重启容器进入工作状态

docker run -it -d --name myjava --restart=always java

#更新Docker容器重启策略

Docker容器的重启策略如下:

no -默认策略,在容器退出时不重启容器

on-failure -在容器非正常退出时(退出状态非0),才会重启容器

on-failure:3 -在容器非正常退出时重启容器,最多重启3次

always -在容器退出时总是重启容器

unless-stopped -在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

docker update --restart=no myjava


#容器导出为镜像

有时我们需要对镜像做二次修改,就可以用原镜像启动一个容器进行修改,然后用此方法导出为镜像包,再用docker load加载到本地镜像库,即可像使用官方镜像一样使用自己修改后的镜像了。

docker commit -m "change something" -a "somebody info" container_id(docker ps -a可以获取容器id) 新镜像名字

docker commit -m "install httpd" -a "frank  ie" 2c74d574293f frankie/centos


#使用Dockerfile生成镜像

docker build -t 镜像名 .

docker build -t nginx_mod/Centos .

如果Dockerfile文件不在当前目录可以使用-f参数指定目标位置

docker build -t nginx_mod/Centos -f /opt/nginx/Dockerfile .


#容器中使用systecmctl

如果我们要使用systecmctl来管理容器内的服务,需要在docker run时加入systecmctl初始化命令

CentOS 7.x初始化systecmctl方式:

docker run -it -d --name mycentos centos:7.6 /usr/sbin/init

Debian初始化systecmctl方式:

docker run -it -d --name mydebian debian:8.11 /sbin/init


Dockerfile文件的编写规范请留意后续文章或自行查阅相关资料。