关于docker
Docker 是一个开源的应用容器引擎
优点:开箱即用,快速部署,可移植性强,环境隔离
应用场景:
1.节省项目环境部署时间(单项目打包、整套项目打包、新开源技术)
2.环境一致性(windows\linux)
3.持续集成(CI/CD 持续集成/持续部署 是一个周期性自动化项目测试流程,包括构建、部署、测试、发布等工作,不需要人工干预,Docker结合Jenkins构建持续集成环境)
4.微服务
5.弹性伸缩
Docker 仓库管理
docker hub
https://hub.docker.com/
目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 15,000 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
操作:
1.登录
docker login
2.搜索镜像
docker search search_name
根据是否是官方提供,可将镜像资源分为两类。
一种是基础镜像或根镜像。这些基础镜像由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字,例如nginx。
还有一种类型,比如 webdevops/php-nginx 镜像,它是由 Docker 的用户创建并维护 的,往往带有用户名称前缀。
3.拉取镜像
docker pull images_name
4.推送镜像 tag版本号
docker push username/images_name:tag
5.退出登录
docker logout
1.安装docker
sudo apt install curl
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
fangjian@ubuntu:~$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
Server: Docker Engine - Community
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.12
Git commit: 459d0df
Built: Mon Dec 13 11:43:36 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
================================================================================
To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:
dockerd-rootless-setuptool.sh install
Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/
WARNING: Access to the remote API on a privileged Docker daemon is equivalent
to root access on the host. Refer to the ‘Docker daemon attack surface’
documentation for details: https://docs.docker.com/go/attack-surface/
================================================================================
fangjian@ubuntu:~$
2.测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:
$ sudo docker run hello-world
fangjian@ubuntu:~$ sudo docker run hello-world
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:97a379f4f88575512824f3b352bc03cd75e239179eea0fecc38e597b2209f49a
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
fangjian@ubuntu:~$
3.查看docker命令
输入 docker 命令来查看到 Docker 客户端的所有命令选项
通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。
4.容器使用
//获取镜像
docker pull ubuntu
//启动容器
docker run -it ubuntu /bin/bash
参数说明:
-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:
//查看所有容器
docker ps -a
//启动已经停止运行的容器
docker start container_id
//后台运行 -d 指定容器的运行模式
docker run -itd --name ubuntu-test ubuntu /bin/bash
加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
//停止一个容器
docker stop container_id
//停止的容器可以重启
docker restart container_id
//在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器
//进入容器
docker attach container_id (从这个容器退出,会导致容器的停止)
docker exec -it container_id /bin/bash (从这个容器退出,不会导致容器的停止)
//导出容器
docker export container_id > ubuntu.tar
//导入容器快照 将快照文件ubuntu.tar导入到镜像test/ubuntu:v1
cat ubuntu.tar | docker impoat - test/ubuntu:v1
//通过指定url或者某个目录导入
docker import http://example.com/exampleimage.tgz example/imagerepo
//删除容器 当容器是停止的
docker rm -f container_id
//清理所有处于终止状态的容器
docker container prune
5.镜像使用
用 docker images 来列出本地主机上的镜像
选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
//运行指定tag容器
docker run -t -i ubuntu:15.10 /bin/bash
//获取指定tag镜像
docker pull ubuntu:13.10
//查找镜像 我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
docker search httpd
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
//拉取镜像
docker pull httpd
//删除镜像
docker rmi REPOSITORY_NAME(就是image_name)
//更新镜像
在已知镜像中做修改,然后再更新镜像并且提交这个镜像
1.更新镜像之前,我们需要使用镜像来创建一个容器。
runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash
root@e218edb10161:/#
2.在这个容器做修改,在运行的容器内使用 apt-get update 命令进行更新。
3.在完成操作之后,输入 exit 命令来退出这个容器。
此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。
4.我们可以通过命令 docker commit 来提交容器副本。
runoob@runoob:~$ docker commit -m=“has update” -a=“runoob” e218edb10161 runoob/ubuntu:v2
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
各个参数说明:
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名
5.我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2:
6.使用我们的新镜像 runoob/ubuntu 来启动一个容器
runoob@runoob:~$ docker run -t -i runoob/ubuntu:v2 /bin/bash
//构建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。
为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
docker build -t runoob/centos:6.7 ./Dockerfile
参数说明:
-t :指定要创建的目标镜像名
./Dockerfile:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec
设置镜像标签
docker tag 860c279d2fec runoob/centos:dev
//push 失败
fangjian@ubuntu:~$ sudo docker push fangjian98/ubuntu:laster
The push refers to repository [docker.io/fangjian98/ubuntu]
An image does not exist locally with the tag: fangjian98/ubuntu
这里需要将ubuntu:v1镜像改名,在名称前加上自己的docker hub的Docker ID,即wangshibo
[root@docker-test1 ~]# docker tag 6ce4aedd12cd wangshibo/myubuntu:v1
[root@docker-test1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB
wangshibo/myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB
docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB
再次进行推送(注意:下面的v1的tag标签可以不打,默认是latest)。推送操作时间稍微会有一点长,耐心等待~
本机删除这个镜像
[root@docker-test1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB
wangshibo/myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB
docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB
注意上面有两个6ce4aedd12cd的镜像ID,此时直接使用这个镜像ID是删除不掉的
[root@docker-test1 ~]# docker rmi 6ce4aedd12cd
Error response from daemon: conflict: unable to delete 6ce4aedd12cd (must be forced) - image is referenced in multiple repositories
应该先删除docker tag改名前的镜像,使用镜像名称删除。(一般在docker tag镜像改名后,最好删除改名前的镜像)
[root@docker-test1 ~]# docker rmi myubuntu:v1
//镜像保存/载入
docker save
docker load
//容器导入/导出
docker import
docker export
这时候需要敲:apt-get update,这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
更新完毕以后再敲命令:apt-get install vim命令即可。
从容器拷贝文件到宿主
docker cp ContainerID:ContainerPath 宿主机Path
//参考
https://www.runoob.com/docker/
https://www.cnblogs.com/H4ck3R-XiX/p/12227485.html