安装
Yum安装配置docker
使用阿里仓库
## 下载阿里源repo文件
$ curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ yum clean all && yum makecache
## yum安装
$ yum install docker-ce -y
## 查看源中可用版本
$ yum list docker-ce --showduplicates | sort -r
## 安装指定版本
##yum install -y docker-ce-18.09.9
## 配置源加速
## https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/docker
vi /etc/docker/daemon.json
{
"registry-mirrors" : [
"https://8xpk5wnt.mirror.aliyuncs.com"
]
}
## 设置开机自启
systemctl enable docker
systemctl daemon-reload
## 启动docker
systemctl start docker
## 查看docker信息
docker info
## docker-client
which docker
## docker daemon
ps aux |grep docker
## containerd
ps aux|grep containerd
systemctl status containerd
中国科技大学的镜像加速器
# 安装docker步骤
rm -fr /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 中国科技大学的镜像加速器
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
systemctl restart docker
核心要素及常用操作详解
三大核心要素:镜像(Image)、容器(Container)、仓库(Registry)
镜像(Image)
打包了业务代码及运行环境的包,是静态的文件,不能直接对外提供服务。
容器(Container)
镜像的运行时,可以对外提供服务。
仓库(Registry)
存放镜像的地方
- 公有仓库,Docker Hub,阿里,网易…
- 私有仓库,企业内部搭建
- Docker Registry,Docker官方提供的镜像仓库存储服务
- Harbor, 是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能
- 镜像访问地址形式 registry.devops.com/demo/hello:latest,若没有前面的url地址,则默认寻找Docker Hub中的镜像,若没有tag标签,则使用latest作为标签。 比如,docker pull nginx,会被解析成docker.io/library/nginx:latest
- 公有的仓库中,一般存在这么几类镜像
- 操作系统基础镜像(centos,ubuntu,suse,alpine)
- 中间件(nginx,redis,mysql,tomcat)
- 语言编译环境(python,java,golang)
- 业务镜像(django-demo…)
容器和仓库不会直接交互,都是以镜像为载体来操作。
查看镜像列表
docker images
如何获取镜像
从远程仓库拉取
docker pull nginx:alpine
## 如果本地没有则会从远程拉取
docker run --name my-nginx-alpine -d nginx:alpine
本地构建
mkdkr /data/dockerfile/ubuntu_nginx -p
cd /data/dockerfileubuntu_nginx
vim dockerfile
# 告诉docker使用哪个基础镜像作为模板,后续命令都以这个镜像为基础
FROM ubuntu
# RUN命令会在上面指定的镜像里执行命令
RUN apt-get update && apt install -y nginx
#告诉docker,启动容器时执行如下命令
CMD ["/usr/sbin/nginx", "-g","daemon off;"]
# 进行构建本地仓库
[root@docker /data/dockerfile/ubuntu_nginx]# docker build -t my-nginx:ubuntu .
导出镜像
[root@docker-test ~]# docker image save -o /opt/docker_alpine.tar.gz alpine:latest
[root@docker-test ~]# ll /opt/docker_alpine.tar.gz
-rw------- 1 root root 5854208 Oct 8 08:33 /opt/docker_alpine.tar.gz
导入镜像
[root@docker-test ~]# docker image load -i /opt/docker_alpine.tar.gz
50644c29ef5a: Loading layer 5.845MB/5.845MB
Loaded image: alpine:latest
[root@docker-test ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest a24bb4013296 4 months ago 5.57MB
centos 6.9 2199b8eb8390 19 months ago 195MB
删除镜像
docker image rmi alpine:latest
# 删除容器
docker rm -f `docker ps -a -q`
容器的基本操作
使用镜像启动容器
docker run -d -p 80:80 nginx:alpine
run 创建并启动一个容器
-d 放后台启动
-p 端口映射
-it 镜像
--name 给容器起个别名
/bin/bash 分配一个交互式的终端(进入容器)
例如: docker run --name my-nginx-ubuntu -d my-nginx:ubuntu
例子: docker run -it centos:6.9 /bin/bash 必须是镜像
访问容器内服务
# 进入容器内部
$ docker exec -ti my-nginx-alpine /bin/sh
# ps aux|grep nginx
# curl localhost:80
宿主机中如何访问容器服务
docker run --name my-nginx-alpine -d -p 8080:80 nginx:alpine
curl 10.0.0.21:8080
停止或者删除容器
docker rm -f <id:name>
## 停止运行中的容器
$ docker stop nginx
## 启动退出容器
$ docker start nginx
## 删除非运行中状态的容器
$ docker rm nginx
## 删除运行中的容器
$ docker rm -f nginx
## 实例
[root@docker /data/dockerfile/ubuntu_nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f42f1fb0d02 my-nginx:ubuntu "/usr/sbin/nginx -g …" 3 minutes ago Up 3 minutes my-nginx-ubuntu
1dfd4a6033bf nginx:alpine "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp my-nginx-alpine
[root@docker /data/dockerfile/ubuntu_nginx]# docker rm -f my-nginx-ubuntu
my-nginx-ubuntu
[root@docker /data/dockerfile/ubuntu_nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1dfd4a6033bf nginx:alpine "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp my-nginx-alpine
[root@docker /data/dockerfile/ubuntu_nginx]# docker rm -f 1dfd4a6033bf
查看容器列表
docker ps
docker ps -a
docker ps -a -q # 只显示ID
docker ps -a -l