[docker] docker学习笔记(一)

docker 学习笔记(一)

本文是基于Ubuntu16.04,不同操作系统可能在安装过程有些差别,但不会影响后续的容器操作。

同时本文的以下操作是基于读者已经对docker是何物,用来做什么的有大致的了解。会以陈述各种配置操作为主,若对docker尚无了解者建议结合其他资料进行阅读

本文章中总结内容全部来自书籍Docker-从入门到实践 https://legacy.gitbook.com/book/yeasy/docker_practice/details

1.安装docker

  • 卸载旧版本的docker或者docker-engine
sudo apt-get remove docker docker-engine docker.id
  • 使用apt安装docker-ce
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common //首先添加使用https传输的软件包及CA证书

sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" //添加apt源

sudo apt-get update

sudo apt-get install docker-ce

2.docker CE服务的启动和停止

sudo systemctl enable docker

sudo systemctl start docker

sudo systemctl stop docker

sudo systemctl restart docker

3.操作系统中哪些用户可以使用docker服务

之所以要谈这一点是因为默认情况下,docker命令会使用Unix socket与docker引擎通讯。而只有root用户和docker组用户才可以访问docker引擎的Unix socket。处于安全考虑,一般不用root用户,故需将使用docker服务的用户添加到docker组中(若无docker组需自行创建)

  • 查看是否有docker组
cat /etc/group |grep docker
  • 建立docker组(如果有的话就不用创建)
sudo groupadd docker
  • 将使用docker服务的user1添加到docker用户组中
sudo usermod -aG docker user1
  • 退出终端,重启docker服务
  • 补充:若还无法使用docker服务,尝试将出错信息中用户没有权限运行的docker脚本文件添加上读写权限,之后在进行尝试

4.镜像加速器

有时从国内拉取镜像会遇到困难,需要配置镜像加速器。(对于更改过maven源的人应该不难理解)对于Ubuntu16.04+,可以在/etc/docker/daemon.json中写入下面的内容

{
        "registry-mirrors": [
                "https://registry.docker-cn.com"
        ]
}

之后重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

5.使用镜像

Docker Hub上面有大量镜像可以使用,下面将谈如何获取并使用它们。

既然谈到获取镜像,那么应该一个镜像的标识,这就是镜像仓库地址和仓库名,其格式为

[Docker Registry 地址[:端口号]/]仓库名[:标签]
  • Docker镜像仓库地址:地址一般格式为<域名/IP>[:端口号]。默认地址时Docker Hub
  • 仓库名:仓库名是两段格式,即<用户名>/<软件名>。对于Docker Hub如果不给出用户名,则默认为library,也就是官方镜像。

例如Ubuntu16.04版本的镜像在Docker Hub中的标识为:

[Docker Hub] [library/]ubuntu:16.04

可以简写为Ubuntu:16.04

5.1获取镜像

docker pull [option] 标识

# example
docker pull ubuntu:16.04
docker pull nginx
docker pull tomcat

5.2列出镜像

docker image ls [-q] //只显示ID号,可以用于shell编程删除镜像
docker image ls ubuntu
docker image ls ubuntu:16.04

镜像ID是镜像的唯一标识。在列出的所有镜像中,一个镜像可以对应多个标签(TAG),但都具有相同的镜像ID。

扫描二维码关注公众号,回复: 1054624 查看本文章

5.3删除镜像

docker image rm imageID/镜像名(即仓库名:标签)

5.4利用docker commit和Dockerfile定制镜像

前面已经提到可以从仓库中下载已有的镜像,如果需要自己定制(大多是对源镜像进行修改成自己定制的新镜像)镜像怎么办?

例如,我们pull了一个nginx镜像,然后通过以下命令更改了nginx的欢迎页面,同时希望将其保存成一个我们自己定制的镜像,这样以后每次启动此镜像就可以得到我们想要的欢迎页面

$ docker run --name webserver -d -p 80:80 nginx //利用nginx镜像创建一个名称为webserver的容器

$ docker exec -it webserver bash
root@3258162e151:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@3258162e151:/# exit
exit

上面的命令具体各种参数代表什么暂时不用懂,只需知道我们以交互式命令的方式进入了webserver容器,执行了bash命令。我们修改了容器,也就是改动了容器的存储层,可以通过docker diff 查看具体改动。

我们已经定制好了变化,那么如何保存下来成为一个新的镜像,方便我们以后使用呢?可以用docker commit命令

docker commit webserver nginx:v2

其中webserver时容器,nginx:v2是新的定制的镜像的名称和标签

使用dockerfile定制镜像请读者自己去阅读文章开始给出的pdf书籍,这里不在详细描述(但是使用dockerfile定制镜像才是经常使用的方法,由于笔者比较懒。。。所以就。。。)

6.操作容器

有了镜像后,就可以以镜像为基础启动并运行一个容器(如果不懂镜像与容器的关系,可以下载笔者在一开始给出的电子版pdf书籍,里面有一章对两者的简短介绍)

6.1启动容器

  • (通过镜像)新建容器并启动
docker run [option]  镜像名称
docker run --name nginx_container -d -p 8080:80 nginx:latest

--name:指定创建的容器的名字,如果忘记写可以通过docker ps [-a] 查看
-p:端口映射,将本地8080端口映射到docker nginx80端口
-d:docker在后台运行,而不把命令执行结果打印到当前宿主机下。
  • 启动已经终止的容器
docker start 容器名称

6.2列出所有创建的容器和运行的容器

docker container ls -a //类似于docker image ls -a

docker ps //列出运行的容器

6.3终止容器

docker stop 容器名称

6.4进入容器

当需要进入容器操作时,需要用到一下命令。

docker attach 或者 docker exec(推荐后者)

进入容器前,需要先启动容器

docker start 容器名称
docker exec -it 容器名称 bash

6.5导入和导出容器

如果要导出本地某个容器,要用docker export命令

docker export 容器ID>xxx.tar

docker export 235345345>ubuntu.tar

通过导出的容器导入docker中作为镜像

cat xxx.tar | docker import -test/镜像名:标签

cat ubuntu.tar | docker import -test/myubuntu:v1.0

docker import http://example.com/exampleimage.tgz example/imagerepo

6.6删除容器

docker rm 容器ID

猜你喜欢

转载自blog.csdn.net/eternally123/article/details/79996833