Docker基础命令

Docker基础命令入门


1. 引言

Docker是一个虚拟环境容器,可以将开发环境、代码、配置文件等一并打包到容器中,在Mac、Linux、Windows中发布,在开发中,经常会遇到配置环境的问题,Docker相比于虚拟机更轻巧快速,它的可移植性和轻量级的特性,还可以使得我们轻松的完成动态管理的工作负担,并根据业务指标需求,实施扩展或拆除应用程序和服务。

Docker的三个基本概念:

1.镜像(Image):

Docker的镜像概念类似于虚拟机中的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

2.容器(Container):

容器是由Docker镜像创建的一个实例,可以看做是一个轻量级的沙盒。Docker引擎用来利用容器来运行、隔离各个应用,可以创建、启动、停止、删除容器,各个容器之间是相互隔离的,互不影响。

3.仓库(Repository):

类似于GitHub,用于托管镜像,仓库中有个人上传镜像和官方镜像。

在<京西商城>项目中,我曾经遇到过celeryrabbitMQfastDFS三个工具的部署工作,部署时踩坑颇多,集中记录一下Docker命令和心得。


2. Docker的安装(macOS)

Docker官方网站下载对应版本的客户端,macOS客户端包含GUI,我们安装好后就能直接发现Docker已经运行成功。
xxx

此时,Docker页面显示如图:

xxx

可以从页面中但看Docker已经运行,且本地已经含有3个image镜像。

我们打开终端,并输入sudo docker --version判断安装是否成功。

xxx

安装完成,我们的Docker已经默认启动了服务。

# 启动docker
sudo service docker start
# 重启docker
sudo service docker restart
# 停止docker
sudo service docker stop

3. Docker的镜像操作

3.1 镜像列表

GraydeMBP:~ gray$ sudo docker image ls
Password:
REPOSITORY    TAG       IMAGE ID       CREATED             SIZE
ubuntu5_tmp   latest    a222e57e76f7   About an hour ago   63.3MB
ubuntu        18.04     2c047404e52d   3 weeks ago         63.3MB
hello-world   latest    bf756fb1ae65   11 months ago       13.3kB
GraydeMBP:~ gray$ 
* REPOSITORY:镜像所在的仓库名称 
* TAG:镜像标签 
* IMAGEID:镜像ID 
* CREATED:镜像的创建日期(不是获取该镜像的日期) 
* SIZE:镜像大小

3.2 从仓库拉取镜像

# 官方镜像
$ sudo docker image pull 镜像名称 或者 sudo docker image pull library/镜像名称
$ sudo docker image pull ubuntu 或者 sudo docker image pull library/ubuntu
$ sudo docker image pull ubuntu:16.04 或者 sudo docker image pull library/ubuntu:16.04

# 个人镜像
$ sudo docker image pull 仓库名称/镜像名称
$ sudo docker image pull itcast/fastdfs
GraydeMBP:~ gray$ sudo docker image pull ubuntu:16.04
16.04: Pulling from library/ubuntu
be8ec4e48d7f: Downloading 
33b8b485aff0: Downloading 
d887158cc58c: Downloading 
05895bb28c18: Downloading 
16.04: Pulling from library/ubuntu
be8ec4e48d7f: Pull complete 
33b8b485aff0: Pull complete 
d887158cc58c: Pull complete 
05895bb28c18: Pull complete 
Digest: sha256:3355b6e4ba1b12071ba5fe9742042a2f10b257c908fbdfac81912a16eb463879
Status: Downloaded newer image for ubuntu:16.04
docker.io/library/ubuntu:16.04
GraydeMBP:~ gray$ sudo docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED             SIZE
ubuntu5_tmp   latest    a222e57e76f7   About an hour ago   63.3MB
ubuntu        16.04     9499db781771   3 weeks ago         131MB
ubuntu        18.04     2c047404e52d   3 weeks ago         63.3MB
hello-world   latest    bf756fb1ae65   11 months ago       13.3kB

3.3 删除镜像

$ sudo docker image rm 镜像名或镜像ID
$ sudo docker image rm ubuntu5_tmp
$ sudo docker image rm a222e57e76f7
GraydeMBP:~ gray$ sudo docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED             SIZE
ubuntu5_tmp   latest    a222e57e76f7   About an hour ago   63.3MB
ubuntu        16.04     9499db781771   3 weeks ago         131MB
ubuntu        18.04     2c047404e52d   3 weeks ago         63.3MB
hello-world   latest    bf756fb1ae65   11 months ago       13.3kB
GraydeMBP:~ gray$ sudo docker image rm ubuntu5_tmp
Untagged: ubuntu5_tmp:latest
Deleted: sha256:a222e57e76f7ae347baa761ea64d3e64671793bc515809395e88d3fbeda0d0a1
GraydeMBP:~ gray$ sudo docker image ls #其中的ubuntu5_tmp已经被删除
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
ubuntu        16.04     9499db781771   3 weeks ago     131MB
ubuntu        18.04     2c047404e52d   3 weeks ago     63.3MB
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB

4. Docker容器操作

4.1 容器列表

# 查看正在运行的容器
$ sudo docker container ls
# 查看所有的容器
$ sudo docker container ls --all
GraydeMBP:~ gray$ sudo docker container ls # 查看正在运行的容器
CONTAINER ID   IMAGE          COMMAND       CREATED             STATUS             PORTS     NAMES
f2e03b572e28   ubuntu:18.04   "/bin/bash"   About an hour ago   Up About an hour             ubuntu5
GraydeMBP:~ gray$ sudo docker container ls --all # 查看所有的容器
CONTAINER ID   IMAGE          COMMAND       CREATED             STATUS                     PORTS     NAMES
f2e03b572e28   ubuntu:18.04   "/bin/bash"   About an hour ago   Up About an hour                     ubuntu5
cbe9d8146990   ubuntu:18.04   "/bin/bash"   2 hours ago         Exited (0) 2 hours ago               ubuntu4
a49265632b2b   ubuntu:18.04   "/bin/bash"   2 hours ago         Exited (0) 2 hours ago               ubuntu3
68b3d9bc93bb   ubuntu:18.04   "/bin/bash"   2 hours ago         Exited (0) 2 hours ago               ubuntu2
77aac4d3503e   ubuntu:18.04   "/bin/bash"   2 hours ago         Exited (100) 2 hours ago             ubuntu1
89d83406afdd   hello-world    "/hello"      2 hours ago         Exited (0) 2 hours ago               goofy_driscoll

4.2 创建容器

$ sudo docker run [option] 镜像名 [向启动容器中传入的命令]
常用可选参数说明:
* -i 表示以《交互模式》运行容器。
* -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
* --name 为创建的容器命名。
* -v 表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 
* -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。 
* -p 表示端口映射,即宿主机端口:容器中端口。
* --network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。
4.2.1 交互式容器
$ sudo docker run -it --name=ubuntu6 ubuntu:18.04 /bin/bash
# 在容器中可以随意执行linux命令,就是一个ubuntu的环境。
# 当执行 exit 命令退出时,该容器随之停止。

xxx

4.2.2 守护式容器
# 开启守护式容器
$ sudo docker run -dit --name=ubuntu7 ubuntu:18.04
GraydeMBP:~ gray$ sudo docker container ls
CONTAINER ID   IMAGE          COMMAND       CREATED       STATUS       PORTS     NAMES
f2e03b572e28   ubuntu:18.04   "/bin/bash"   2 hours ago   Up 2 hours             ubuntu5
GraydeMBP:~ gray$ sudo docker run -dit --name=ubuntu7 ubuntu:18.04
aef676148140c247bb0052da4e0390f81ba184512d53c3d2bc6c014a6eb02702
GraydeMBP:~ gray$ sudo docker container ls
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES
aef676148140   ubuntu:18.04   "/bin/bash"   9 seconds ago   Up 9 seconds             ubuntu7
f2e03b572e28   ubuntu:18.04   "/bin/bash"   2 hours ago     Up 2 hours               ubuntu5
# 进入到容器内部交互环境
$ sudo docker exec -it 容器名或容器id 进入后执行的第一个命令
$ sudo docker exec -it ubuntu2 /bin/bash
GraydeMBP:~ gray$ sudo docker container ls
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES
aef676148140   ubuntu:18.04   "/bin/bash"   9 seconds ago   Up 9 seconds             ubuntu7
f2e03b572e28   ubuntu:18.04   "/bin/bash"   2 hours ago     Up 2 hours               ubuntu5
GraydeMBP:~ gray$ sudo docker exec -it ubuntu7 /bin/bash
Password:
root@aef676148140:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@aef676148140:/# mkdir hello.txt
root@aef676148140:/# ls
bin  boot  dev  etc  hello.txt  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@aef676148140:/# exit
exit
GraydeMBP:~ gray$ 
# 如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。
# 在容器内部执行 exit 命令退出时,该容器也随之停止。

4.3 停止和启动容器

# 停止容器
$ sudo docker container stop 容器名或容器id
# kill掉容器
$ sudo docker container kill 容器名或容器id
# 启动容器
$ sudo docker container start 容器名或容器id

4.4 删除容器

注意:正在运行的容器无法删除,必须先停止容器,如果无法停止也可以kill掉容器

$ sudo docker container rm 容器名或容器id

4.5 容器制成镜像

为了将配置完成的环境可以重复利用,或分享,我们可以将容器制作成镜像。

# 将容器制作成镜像
$ sudo docker commit 容器名 镜像名
# 镜像打包备份
$ sudo docker save -o (位置)+保存的文件名 镜像名 # (省略则默认根目录)
GraydeMBP:~ gray$ sudo docker container ls
Password:
CONTAINER ID   IMAGE          COMMAND       CREATED             STATUS             PORTS     NAMES
aef676148140   ubuntu:18.04   "/bin/bash"   About an hour ago   Up About an hour             ubuntu7
f2e03b572e28   ubuntu:18.04   "/bin/bash"   3 hours ago         Up 3 hours                   ubuntu5
GraydeMBP:~ gray$ sudo docker commit ubuntu7 ubuntu7_tmp 
sha256:bc54a3828a4fe916c3f7935e6a41742e58d6603efde03e9a37bda1b6535b375e
GraydeMBP:~ gray$ sudo docker save -o ubuntu7_tmp.tar ubuntu7_tmp
GraydeMBP:~ gray$ ls
Applications			Downloads			Parallels			fsdownload
Desktop				Movies				Public				ubuntu7_tmp.tar

假如我们需要将别人打包好的备份导入该如何操作呢?

# 镜像解压
$ sudo docker load -i 文件路径/备份文件
GraydeMBP:django-study gray$ ls
bookmanager		fastdfs_docker.tar	ubuntu5_tmp.tar
GraydeMBP:django-study gray$ sudo docker load -i fastdfs_docker.tar 
Password:
43e653f84b79: Loading layer [==================================================>]  207.2MB/207.2MB
b53d7889c283: Loading layer [==================================================>]  239.4MB/239.4MB
173e7c0101b8: Loading layer [==================================================>]  4.096kB/4.096kB
86bb2d38a7fd: Loading layer [==================================================>]   1.97MB/1.97MB
c964e799140e: Loading layer [==================================================>]  6.117MB/6.117MB
33e47575beac: Loading layer [==================================================>]   2.56kB/2.56kB
d98fa29adb07: Loading layer [==================================================>]  7.103MB/7.103MB
faa1ac83b5e3: Loading layer [==================================================>]  25.09kB/25.09kB
962bf3b9c052: Loading layer [==================================================>]  93.18kB/93.18kB
b4d8646fb534: Loading layer [==================================================>]  16.06MB/16.06MB
7c4117be0eb5: Loading layer [==================================================>]   59.9kB/59.9kB
cb1d1ef69510: Loading layer [==================================================>]  5.632kB/5.632kB
ea8af36b7729: Loading layer [==================================================>]   5.12kB/5.12kB
882cf81bf175: Loading layer [==================================================>]   5.12kB/5.12kB
Loaded image: delron/fastdfs:latest
GraydeMBP:django-study gray$ sudo docker image ls
REPOSITORY       TAG       IMAGE ID       CREATED         SIZE
ubuntu7_tmp      latest    bc54a3828a4f   8 minutes ago   63.3MB
ubuntu           16.04     9499db781771   3 weeks ago     131MB
ubuntu           18.04     2c047404e52d   3 weeks ago     63.3MB
hello-world      latest    bf756fb1ae65   11 months ago   13.3kB
delron/fastdfs   latest    8487e86fc6ee   2 years ago     464MB 
# 最后一行就是我们之前提到的fastDFS 备份文件

4.6 本地映射(以fastDFS为例)

1.获取镜像

# 从仓库拉取镜像
$ sudo docker image pull delron/fastdfs
# 解压教学资料中本地镜像
$ sudo docker load -i 文件路径/fastdfs_docker.tar
GraydeMBP:~ gray$ sudo docker image ls
REPOSITORY       TAG       IMAGE ID       CREATED         SIZE
ubuntu           16.04     9499db781771   4 weeks ago     131MB
ubuntu           18.04     2c047404e52d   4 weeks ago     63.3MB
hello-world      latest    bf756fb1ae65   11 months ago   13.3kB
delron/fastdfs   latest    8487e86fc6ee   2 years ago     464MB

现在,我们开启tracker容器,并将tracker运行目录映射到宿主机/var/fdfs/tracker本地目录中

$ sudo docker run -dit --name tracker --network=host -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
GraydeMBP:django-study gray$ ls
bookmanager		fastdfs_docker.tar	ubuntu5_tmp.tar
GraydeMBP:django-study gray$ sudo docker run -dit --name tracker --network=host -v /Users/gray/Desktop/django-study/fdfs/tracker:/var/fdfs delron/fastdfs tracker
4ec8ccbd5fd58d2373cc85b3fc81423a3fea6774d9e0f0642ec275769363c933
GraydeMBP:django-study gray$ sudo docker container ls 
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS     NAMES
4ec8ccbd5fd5   delron/fastdfs   "/usr/bin/start1.sh …"   14 seconds ago   Up 13 seconds             tracker
GraydeMBP:django-study gray$ ls
bookmanager		fastdfs_docker.tar	fdfs			ubuntu5_tmp.tar
# 可以看到fastDfs文件夹已经挂载

3.现在,我们开启storage容器,TRACKER_STORAGE=Tracker的IP地址:22122,再将storage运行目录映射到宿主机/var/fdfs/storage本地目录中

$ sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=192.168.123.227:22122 -v /Users/gray/Desktop/django-study/fdfs/storage:/var/fdfs delron/fastdfs storage
GraydeMBP:tracker gray$ sudo docker container ls
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS     NAMES
4ec8ccbd5fd5   delron/fastdfs   "/usr/bin/start1.sh …"   17 minutes ago   Up 17 minutes             tracker
GraydeMBP:tracker gray$ sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=192.168.123.227:22122 -v /Users/gray/Desktop/django-study/fdfs/storage:/var/fdfs delron/fastdfs storage
70b26b6e08ca5e5a869ebe2f41f3de910513a9ff5769c9ead46572d4a2f88dc9
GraydeMBP:tracker gray$ sudo docker container ls
CONTAINER ID   IMAGE            COMMAND                  CREATED              STATUS              PORTS     NAMES
70b26b6e08ca   delron/fastdfs   "/usr/bin/start1.sh …"   About a minute ago   Up About a minute             storage
4ec8ccbd5fd5   delron/fastdfs   "/usr/bin/start1.sh …"   21 minutes ago       Up 21 minutes                 tracker
GraydeMBP:fdfs gray$ ls
storage	tracker






博文的后续更新,请关注我的个人博客:星尘博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值