一、Docker的镜像仓库
镜像仓库的概念就和YUM仓库一样,仓库里面存放了各种镜像,比如Centos系统镜像、Redis镜像、MySQL镜像等。由于Docker服务默认使用的镜像仓库是docker hub,该仓库地址(https://hub.docker.com/)在国外,存在速度慢的问题。建议配置阿里云或者清华大学的镜像仓库。以阿里云为例,只需要登录阿里云控制台–容器镜像服务,就可以看到一个自己专属的镜像仓库地址,甚至连怎么配置的命令都给写了出来,如图
1. 国内加速地址
- Docker中国区官方镜像 https://registry.docker-cn.com
- 网易 http://hub-mirror.c.163.com
- ustc https://docker.mirrors.ustc.edu.cn
- 中国科技大学 https://docker.mirrors.ustc.edu.cn
- 阿里云容器 服务 https://cr.console.aliyun.com/
首页点击“创建我的容器镜像” 得到一个专属的镜像加速地址,类似于“https://1234abcd.mirror.aliyuncs.com”
2.镜像仓库配置完成后重启docker并使用docker info命令查看下是否生效
vi /etc/docker/daemon.json { "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } systemctl daemon-reload systemctl restart docker docker info
二、Docker镜像管理常用命令介绍
从Docker分为CE版和EE版开始,命令行也发生了变化。CE版本中对命令进行了分组,并且支持命令补全,包括版本号都可以自动补全。使用docker –help命令可以看到Management Commands下包含了一些组,每个组下又包含了许多子命令。所以在新版本中运行命令的方式是docker+组名+子命令的方式,而老版本中直接是“docker+子命令”。虽然为了兼容性支持以前的命令格式,但是推荐使用新的管理方式。
docker container create #新格式 docker create #老格式 docker container --help #查看指定组所支持的子命令
1、查看当前系统中的镜像
使用docker images命令查看当前系统中所有镜像的基本信息,如镜像ID、创建时间、镜像大小等
2、搜索镜像
使用docker search命令可以在默认的镜像仓库docker hub中进行镜像搜索,搜索结果中没有带用户名信息的镜像通常是官方镜像
docker search nginx # INDEX代表了镜像来源于哪个仓库,默认是docker.io # NAMES:镜像的名字,如果名字没有用/分割代表是顶级仓库,通常是官方提供的镜像。而带/的前面是用户名,后面才是镜像名,后续安装和启动都需要用到这个名字 # DESCRIPTION:镜像的描述信息 # STARS:是获得的星数,也就是评分或热门程度 # OFFICIAL:官方认证
3、下载镜像
使用docker pull命令从指定的公网仓库中下载指定的Docker镜像,如果一个镜像存在多个版本,需要先到Docker Hub中确认每个版本的标签才能正确的下载
#命令格式 #docker pull [registry地址[:端口]/]镜像名:标签 #registry是仓库地址,默认为dockerhub;镜像名完整格式是<用户名>/<镜像名>,用户名不写的话默认使用官方镜像;镜像标签默认为latest docker pull nginx #从dockerhub中下载官方nginx镜像 docker pull bitname/wordpress #从dockerhub下载bitname所提供的wordpress镜像 docker pull quay.io/coreos/flannel:v1.1 #从quay.io这个公网仓库的coreos名称空间中下载镜像flannel镜像,标签为v1.1
4、删除镜像
使用docker rmi命令可以通过镜像名字或者ID来删除已下载的Docker镜像
docker rmi 688353a31fde
三、Docker容器管理常用命令介绍
1、运行容器
使用docker run命令可以将镜像运行成为容器,如果镜像不存在于本地的话会自动去仓库中下载。该命令包含了许多子选项:
-d:以后台方式运行容器,该选项需要配合-i、-t选项一起使用,使用该选项后exit退出容器也不影响里面运行的程序
-it:这里包含了i和t两个选项,代表使用交互方式打开一个容器的终端以便执行命令
-e:定义容器启动后的环境变量
–dns:自定义容器的DNS地址
–name:定义容器本身的名字
–hostname:定义容器运行后的主机名,否则会使用容器的ID作为主机名
–network:指定容器的网络,常用于容器跨主机通信
–add-host:为容器的hosts文件增加记录
–rename :修改容器名字
#使用docker ps命令可以看到命令后的名称 docker run -it --name=centos_test --hostname=server1 centos /bin/bash #/bin/bash是让容器保持运行这个进程,也可以是以前台方式启动其他服务,以免容器状态结束
-p:宿主机与Docker容器的端口映射,实现容器端口暴露到宿主机上,这样访问物理机端口就可以访问到容器中的服务,该选项可多次使用。比如在容器中安装Nginx,然后把80端口映射到宿主机上的任意端口,然后通过宿主机就可以访问到容器中的服务。使用netstat命令或者docker ps命令、docker port命令都可以查看到端口映射关系,使用iptables命令还可以看到自动创建好的转发规则。
#把容器中80端口映射到物理机8000端口,如果容器监听了多个端口就暴露多次 docker run --name test_nginx --rm -p 80 linuxe # 不写宿主机端口则是一个随机端口 docker run --name test_nginx --rm -p 8000:80 -p 3306:3306 linuxe #宿主机端口为8000,网络接口为ALL docker run --name test_nginx --rm -p 192.168.1.100:8000:80 linuxe #指定了网络接口 docker port nginx #查看nginx容器的端口映射关系
–restart:Docker容器的自启动,使用该选项后容器会跟随宿主机的启动而自我启动。该选项默认值是no,改为yes即可
docker run -itd --restart=yes -name=centos_docker1 docker.io/ansible/centos7-ansible /bin/bash
–rm:容器命令运行后自动删除容器。常用于云主机环境,需要短期且大量的Docker虚拟机工作,工作完成后自动销毁
docker run -it --rm --name test docker.io/centos sleep 5 #sleep 5执行完毕后就会删除这个镜像
–link:会在hosts文件中为指定的容器做一个解析记录,常用于不同容器之间的互通,免去手动配置IP
docker run -it --link nginx:web nginx:lastert /bin/bash #nginx为另一个容器的名字,web为这个容器的别名,ping web这个名字可以看到nginx这个容器的IP #nginx容器和mysql、zabbix互通 docker run --name zabbix-web-nginx-mysql -t \ -e DB_SERVER_HOST="mysql-server" \ -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="zabbix" \ -e MYSQL_PASSWORD="zabbix" \ -e MYSQL_ROOT_PASSWORD="zabbix" \ --link mysql-server:mysql \ --link zabbix-server-mysql:zabbix-server \ -p 8080:80 \ -d zabbix/zabbix-web-nginx-mysql:latest
2、容器的启动、停止、重启与杀死,需要注意的是启动其实是创建和运行的结合,也就是docker create+docker start——docker container start、docker container stop、docker container restart、docker container kill
docker container restart nginx_docker docker container kill test_nginx
3、有时候需要暂停容器工作一段时间,比如进行快照、暂时释放宿主机资源——docker pause、docker unpause
docker pause centos:v1 #pause后不暂用宿主机资源 docker unpause centos:v1
4、容器元信息等其它信息的查看——docker container ps、docker container inspect、docker container port
docker ps命令用来查看正在运行的容器信息,加上-a选项可以查看已经退出的容器;docker port命令可以查看容器端口的映射信息;docker inspect命令可以查看容器更详细的底层信息,如容器运行后默认执行什么命令(cmd)、每个容器的IP信息(这就是为什么能通过宿主机访问容器中服务的原因,在安装了Docker后网卡配置里多了一个docker0的网卡,之后建立的容器都是跟该网卡在一个网段内,默认是172.段),如果想获取某一个大类下的子类信息,使用语法:
docker container inspect -f {{.NetworkSettings.IPAddress}} nginx #获取nginx容器下的IP信息,可以精确到小类 docker port test_nginx #查看端口映射情况
5、Docker容器的进入与退出——docker container attach、docker container exec
进入容器有2种方法,docker attach和docker exec,然后跟上容器的名字或者ID即可。
docker exec -it 775c7c9ee1e1 /bin/bash
attach与exec的区别:attach直接进入容器正在运行的命令中,不会启动新的进程,比如容器是在执行一个无限循环进行输出,那attach进入后则会看到这些输出信息。而exec则是开启一个新的终端,并且可以启动新的进程。如果想直接在终端中查看启动命令的输出用attach,其他情况都使用exec即可。
容器运行后如果要退出的话,不要使用exit命令来退出终端,这样容器状态会成为exitd状态,里面的服务也就无法正常使用了。需要使用ctrl+p+q这样的组合键进行退出,这样可以保持容器状态是UP。如果容器已经是exitd状态,通过docker start命令启动来恢复运行
6、给镜像打标签——docker tag命令
docker tag 38baaxh26s6661 tanglu/centos:v1.1 #给一个没有标签的镜像打上标签,这里没有写仓库地址,默认是dockerhub,完整格式就是dockerhub/tanglu/centos:v1.1 docker tag tanglu/centos:v1.1 tanglu/centos:v1.2 #修改标签
7、删除Docker容器
如果要删除已经停止的容器则使用docker rm命令,删除镜像的话使用的是docker rmi命令,跟上镜像名称或者ID都可以删除。如容器没有停止的话是无法直接删除的,需要加上-f选项或者先停止掉容器,使用命令是docker stop或者docker kill,然后跟上ID或者镜像名称,停止后再执行删除就可以了。
8、查看镜像的构建过程——docker history命令
docker histrosy image_name
9、从宿主机复制文件到容器(也可以反向操作)——docker cp命令
docker cp index.html 770fbbsagi:/usr/local/nginx/html/
原文链接:https://blog.csdn.net/weixin_42073629/article/details/117049491?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168812856316782425187528%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168812856316782425187528&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-25-117049491-null-null.268%5Ev1%5Ekoosearch&utm_term=docker%E3%80%81wordpress%E3%80%81wordpress%E5%BB%BA%E7%AB%99%E3%80%81wordpress%E4%B8%BB%E9%A2%98%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81