应用容器引擎Docker的基本使用

关于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

Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be

  • sudo -E sh -c ‘apt-get update -qq >/dev/null’
  • sudo -E sh -c ‘DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null’
  • sudo -E sh -c ‘curl -fsSL “https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg” | gpg --dearmor --yes -o /usr/share/keyrings/docker-archive-keyring.gpg’
    gpg: WARNING: unsafe ownership on homedir ‘/home/fangjian/.gnupg’
  • sudo -E sh -c ‘echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable” > /etc/apt/sources.list.d/docker.list’
  • sudo -E sh -c ‘apt-get update -qq >/dev/null’
  • sudo -E sh -c ‘DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends docker-ce-cli docker-scan-plugin docker-ce >/dev/null’
  • version_gte 20.10
  • ‘[’ -z ‘’ ‘]’
  • return 0
  • sudo -E sh -c ‘DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null’
  • sudo -E sh -c ‘docker version’
    Client: Docker Engine - Community
    Version: 20.10.12
    API version: 1.41
    Go version: go1.16.12
    Git commit: e91ed57
    Built: Mon Dec 13 11:45:27 2021
    OS/Arch: linux/amd64
    Context: default
    Experimental: true

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:

  1. The Docker client contacted the Docker daemon.
  2. The Docker daemon pulled the “hello-world” image from the Docker Hub.
    (amd64)
  3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
  4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

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

你可能感兴趣的:(技术流Clip,docker,linux,容器)