Docker基本命令讲解
注:操作系统环境: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文件的编写规范请留意后续文章或自行查阅相关资料。