一个前端的docker入门过程

这篇文章主要介绍了笔者自己初玩docker的一些入门心得,想简单了解或学习docker的朋友可以看一看,篇幅不大,这里不教你怎么自己做镜像,只介绍如何下载已经制造好的docker,然后纯玩。

介绍

docker就像一个虚拟机,想用就打开,不用就关机,不要就一个命令删了它。

  1. 是用Go语言实现的
  2. 据官方介绍,CPU消耗低、省内存
  3. 启动关闭贼快
  4. 下面叫它容器

本文主要介绍:

  1. docker的安装和启动
  2. 镜像的启动、停止、删除
  3. 登录运行的镜像,镜像的拷贝等

安装

这里只介绍LinuxMacOS的安装。

Linux

如果你是Centos7,安装和启动只需要执行:

1
2
3
yum -y install docker
service docker start

如果你是Centos6,安装和启动只需要执行:

1
2
3
yum -y install docker-io
service docker start

MacOS

如果是MacOS,稍微麻烦一点:

  1. 下载Docker
  2. 按正常Mac安装、启动流程,上述网站也有图片描述

Download help

docker是因linux而存在的,只有linux才能发挥其性能。

使用

玩docker其实和玩linux系统差不多,就是一个搭积木(部署环境、装软件)的过程。准备过程很简单,打开终端就行。

第一次玩镜像

1
docker run ubuntu echo hello docker

如果出现了下面所示情况,表示docker没启动,启动下就好。

1
2
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

如果出现下面所示情况,说明没有docker镜像,docker自己会去拉镜像,拉完镜像便能执行命令了。

1
2
3
4
5
6
7
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
8f7c85c2269a: Downloading [> ] 441.5kB/42.84MB
9e72e494a6dd: Download complete
3009ec50c887: Download complete
9d5ffccbec91: Download complete
e872a2642ce1: Download complete

docker run ubuntu echo hello docker命令是启动一个ubuntu系统,然后执行echo hello docker。速度非常快,比正常开启一个ubuntu系统可快的多。

docker images 查看当前系统存在的镜像

第二个docker,装好了nginx

nginx是一个非常强大的、高性能web服务器、反向代理服务器,俄罗斯🇷🇺的,这里就不详细介绍了。

docker仓库有一个镜像叫nginx,我们可以docker pull nginx先下载。(也可以不下载,让它执行时,自己去拉)

1
docker run -d -p 8080:80 --name myNginx nginx

这里介绍一下两个参数

  • -d   daemon,守护进程
  • -p   指定映射端口,本地8080端口对应docker容器内的80端口
  • --name 指定容器的名称,一些命令可以直接用名称代替imagesID

这就在本地8080端口启动了一个nginx服务,和正常启动一个nginx服务没有什么区别,只是在docker内的,所有文件都处于容器内部,运行时也和外界隔离,不想要的时候可以直接移除,并不会对本地造成影响,挥挥手,不带走一片云彩。

这时候,可以执行docker ps,查看当前运行的docker,可以看到docker名称、ID、镜像、运行时间等信息。

  1. 如果不想要了,可以docker stop [imagesID/Name]停止当前运行的容器。

  2. 如果想把停止的这个容器重新启动,我们需要执行docker ps -a查看所有运行过的容器列表,找到刚stop掉的容器,执行docker restart [imagesID/Name]可以重新启动当前容器

容器内外文件拷贝

我们启动了一个docker,肯定需要修改一些配置,比如nginx.conf文件。这时候我们先把nginx docker运行。

偶尔可能会看到如下情况,介绍也说明了,需要先删除这个容器:

1
2
3
4
docker: Error response from daemon: Conflict.
The container name "/nginx" is already in use by container "e725c26ee50f5d3395a986b8030f0bbda8489803169c76dd93477a91467913ab".
You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

docker ps -a查看所有运行过的容器,执行docker rm [imagesID/Name]完全删除启动过的容器

启动成功之后,如下显示:

1
2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e725c26ee50f nginx "nginx -g 'daemon ..." 4 minutes ago Up 4 minutes 0.0.0.0:8080->80/tcp nginx

  1. 接下来,使用命令docker exec -it e725c26ee50f /bin/sh进入nginx容器内部
  2. whereis nginx查看nginx的位置,配置文件位置/etc/nginx/nginx.conf,静态资源服务器路径/usr/share/nginx/html

容器内部貌似不能编辑文件,我们可以将其拷贝出来修改,再放回去,可以自己定义一个html文件放入静态资源服务器文件夹

1
2
3
4
docker cp e725c26ee50f:/etc/nginx/nginx.conf .
docker cp nginx.conf e725c26ee50f:/etc/nginx
echo "hello, nginx" > index.html
docker cp index.html nginx:/usr/share/nginx/html

再次访问 http://localhost:8080 ,就能发现页面已经变成了hello, nginx

镜像迁移

有些时候我们在其他服务器(下载镜像过慢、或者无网络)使用镜像,我们可以使用镜像保存和加载。

1
2
3
4
5
docker save -o nginx myNginx.tar
docker load < myNginx.tar
docker images

save可以把本地镜像保存起来,load则在其他地方把镜像导入。

附录

docker命令

命令 功能
docker images 查看当前系统存在的镜像
docker run 启动一个docker容器
docker ps 查看当前运行的docker
docker ps -a 查看当前、所有运行过的docker
docker stop [imagesID/Name] 停止当前运行的docker
docker rm [imagesID/Name] 完全删除运行过的docker
docker exec -it [imagesID/Name] /bin/sh 进入容器内部
docker pull nginx 下载镜像nginx
docker cp <src> <target> 容器内外的拷贝
docker rmi [imagesID/Name] 删除ID为imagesID的镜像
docker save -o [REPOSITORY] i.tar 打包镜像REPOSITORY为i.tar
docker load < i.tar 将i.tar中的镜像加载到当前docker镜像列表

参考

慕课视频Docker入门 https://www.imooc.com/video/15640