centos安装docker
#更新yum
yum update
#卸载老版本docker
yum remove docker docker-common docker-selinux docker-engine
#安装依赖包
yum install -y yum-utils device-mapper-persistent lvm2
#设置docker yum源/
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#查看docker版本
yum list docker-ce --showduplicates|sort -r
#安装docker
yum install -y docker-ce-18.03.1.ce
#启动docker
systemctl start docker
#加入开机自启
systemctl enable docker
#配置国内镜像
vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
#查看docker进程
ps -aux|grep docker
docker 基本命令
#查看所有镜像
docker images
#下载镜像,run命令运行镜像时,docker首先是在本机寻找该镜像,如果本机不存在,回去dockerhub上搜索符合条件
#的镜像并将其下载下来运行
docker run ubuntu echo "hello"
#在dockerhub上拉取镜像
docker pull [镜像名称]
#删除指定镜像
docker rmi 镜像ID
#强制删除
docker rmi -f 镜像id
#删除所有容器
docker rmi $(docker images -q)
#根据dockerfile生成镜像
docker build -t [镜像名] .
#查看镜像历史
docker history 镜像名
docker hub 发布
- 先去官网注册账号
hub官网 - 在虚拟机中操作
docker login
username: sss
password:
Login Successed
注意:
在上面执行的代码可能出现如下异常 rror response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifest
这个问题的异常主要是
- 解析ip不可用
- 因为dns域名没有解析
解决:
yum install bind-utils
dig @114.114.114.114 registry-1.docker.io;
<<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> @114.114.114.114 registry-1.docker.io ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57840 ;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;registry-1.docker.io. IN A
;; ANSWER SECTION: registry-1.docker.io. 33 IN A 34.205.88.205 registry-1.docker.io. 33 IN A 35.169.133.189 registry-1.docker.io. 33 IN A 34.202.247.184 registry-1.docker.io. 33 IN A 3.224.11.4 registry-1.docker.io. 33 IN A 3.82.34.201 registry-1.docker.io. 33 IN A 34.195.36.112 registry-1.docker.io. 33 IN A 3.221.133.86 registry-1.docker.io. 33 IN A 3.224.75.242
;; Query time: 26 msec ;; SERVER: 114.114.114.114#53(114.114.114.114) ;; WHEN: 三 4月 22 04:41:31 CST 2020 ;; MSG SIZE rcvd: 177
~ vi /etc/hosts
34.205.88.205 registry-1.docker.io
~ systemctl restart docker
登入成功之后,使用push命令就可以上传镜像,如果不指定tag则本地的镜像都会上传
上传命令
docker push 注册名/镜像名:tag
如果之前创建的名称不符合规范那么需要修改名称,需要跟docker hub上创建的名称一样
docker tag redis5 注册名/镜像名:tag
生成容器
根据镜像生成容器
#查看所有容器 -a(所有的容器)不加表示运行中容器
docker ps -a
#创建容器
docker run -itd --name redis5 注册名/镜像名:tag
#进入容器
docker exec -it redis5 bash
- OPTIONS说明:
- a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- d: 后台运行容器,并返回容器ID;
- i: 以交互模式运行容器,通常与 -t 同时使用;
- t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -name=“nginx-lb”: 为容器指定一个名称;
- -dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- -dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- h “mars”: 指定容器的hostname;
- e username=“ritchie”: 设置环境变量;
- -env-file=[]: 从指定文件读入环境变量;
- -cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
- m :设置容器使用内存最大值;
- -net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- -link=[]: 添加链接到另一个容器;
- -expose=[]: 开放一个端口或一组端口;
容器类型:
- 交互型容器:运行在前台,通常会制定有交互的控制台,可以给容器输入,也可以得到容器的输出。创建该日期的终端被关闭,在容器内部使用 exit命令或者调用docker stop 、docker kill命令后,容器会变成停止状态
- 后台型容器:运行在后台,创建启动之后就与终端无关。即便终端关闭了,改后台容器也依然存在,只有执行docker stop或者docker kill命令 时候才能够使容器变成停止状态