Docker安装及操作说明

1. Docker概述

(1)容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

(2)Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。官网:https://docs.docker.com/

2. 虚拟化技术和容器化技术

(1)虚拟化技术特点:硬件基础上的隔离技术。

(2)容器化技术:操作系统之上的隔离技术。

3. Docker的基本组成

(1)镜像( image ) :
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===>run ==> tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

(2)容器( container ) :
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统

(3)仓库( repository ) :
仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库!Docker Hub (默认是国外的)

4. Docker的安装

#!/bin/bash
# 移除掉旧的版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

# 删除所有旧的数据
sudo rm -rf /var/lib/docker

#  安装依赖包
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

# 添加源,使用了阿里云镜像
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 配置缓存
sudo yum makecache fast

# 安装最新稳定版本的docker
sudo yum install -y docker-ce

# 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF

# 启动docker引擎并设置开机启动
sudo systemctl start docker
sudo systemctl enable docker

# 配置当前用户对docker的执行权限
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo systemctl restart docker

5. Docker的卸载

  1. 卸载依赖

    yum remove docker-ce docker-ce
    
  2. 删除资源 :. /var/lib/docker是docker的默认工作路径

    rm -rf /var/lib/docker
    

6. Docker常用命令

10.1 基础命令

docker version          #查看docker的版本信息
docker info             #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help       #帮助命令(可查看可选的参数)
docker COMMAND --help

命令的帮助文档地址:

10.2 镜像命令

1.docker images 查看本地主机的所有镜像

[root@xiaodong ~]# docker images

2.docker search 搜索镜像

[root@xiaodong ~]# docker search mysql 

3.docker pull 镜像名[:tag] 下载镜像

[root@xiaodong ~] # docker pull mysql:5.7 

4.docker rmi 删除镜像

1.删除指定的镜像id
[root@xiaodong~]# docker rmi -f  镜像id

2.删除多个镜像id
[root@xiaodong~]# docker rmi -f  	镜像id 镜像id 镜像id

3.删除全部的镜像id
[root@xiaodong ~]# docker rmi -f  $(docker images -aq)

10.3 容器命令

1.运行容器(run)

docker run  [可选参数]  image 

# 参数说明 
--name="名字"         指定容器名字 
-d                    后台方式运行 
-it                   使用交互方式运行,进入容器查看内容 
-p                    指定容器的端口
[root@xiaodong ~]# docker run -it centos /bin/bash
[root@centosid /]# ls      
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

2.退出容器 (exit)

# exit 停止并退出容器(后台方式运行则仅退出)
# Ctrl+P+Q  不停止容器退出
[root@xiaodong /]# exit
exit
[root@xiaodong~]#

3.查看容器(ps)

docker ps  # 列出当前正在运行的容器
-a   # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q   # 只显示容器的编号
[root@xiaodong ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@xiaodong ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                PORTS         
bca129320bb5   centos         "/bin/bash"   4 minutes ago   Exited (0) 3 minutes ago   
bd1b8900c547   centos         "/bin/bash"   6 minutes ago   Exited (0) 5 minutes ago             
cf6adbf1b506   bf756fb1ae65   "/hello"      5 hours ago     Exited (0) 5 hours ago               

4.删除容器 (rm)

docker rm 容器id                    #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq)       #删除所有的容器
docker ps -a -q|xargs docker rm     #删除所有的容器

5.启动和停止容器

docker start 容器id          #启动容器
docker restart 容器id        #重启容器
docker stop 容器id           #停止当前运行的容器
docker kill 容器id           #强制停止当前容器

6. 日志查看

docker logs -tf 容器id
docker logs --tail number 容器id   #num为要显示的日志条数 
#docker容器后台运行,必须要有一个前台的进程,否则会自动停止
#编写shell脚本循环执行,使得centos容器保持运行状态
[root@xiaodong ~]# docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"

7. 查看容器进程

[root@xiaodong ~]# docker top c703b5b1911f
UID      PID       PPID       C        STIME    TTY     TIME          CMD
root     11156     11135      0        11:31     ?    00:00:00      /bin/sh -c while true;do echo hi;sleep 5;done
root     11886     11156      0        11:43     ?    00:00:00      /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5

8.进入当前容器

  • docker exec 进入容器后开启一个新的终端,可以在里面操作
  • docker attach 进入容器正在执行的终端,不会启动新的进程
[root@xiaodong ~]# docker exec -it c703b5b1911f /bin/bash
[root@c703b5b1911f /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@c703b5b1911f /]# ps -ef      
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 03:31 ?        00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
root       279     0  0 03:54 pts/0    00:00:00 /bin/bash
root       315     1  0 03:56 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
root       316   279  0 03:56 pts/0    00:00:00 ps -ef	
[root@xiaodong ~]# docker attach c703b5b1911f

9.拷贝操作

  • 拷贝容器的文件到主机中
docker cp 容器id:容器内路径  目的主机路径
  • 拷贝宿主机的文件到容器中
docker cp 目的主机路径 容器id:容器内路径
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it c703b5b1911f /bin/bash
[root@c703b5b1911f /]# cd home
[root@c703b5b1911f home]# ls
# touch 新建文件
[root@c703b5b1911f home]# touch test.java
[root@c703b5b1911f home]# ls
test.java
[root@c703b5b1911f home]# exit
exit
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
c703b5b1911f   centos    "/bin/sh -c 'while t…"   35 minutes ago   Up 35 minutes             pedantic_banach
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker cp c703b5b1911f:/home/test.java /home
[root@iZwz99sm8v95sckz8bd2c4Z ~]# ls /home
hai  pan  test.java

10.命令小结

img

7. 图形化管理工具Portaniner安装

[root@localhost conf]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

8.提交镜像

使用docker commit 命令提交容器成为一个新的版本
docker commit -m=“提交的描述信息”  -a="作者" 容器id 目标镜像名:[TAG]  
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker commit -m="add webapps" -a="Ethan" 2a3bf3eaa2e4 mytomcat:1.0 

9.Nginx部署

1.pull nginx镜像

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull nginx 
Using default tag: latest
latest: Pulling from library/nginx
6ec7b7d162b2: Already exists 
cb420a90068e: Pull complete 
2766c0bf2b07: Pull complete 
e05167b6a99d: Pull complete 
70ac9d795e79: Pull complete 
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker images;
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        5.7       f07dfa83b528   5 days ago    448MB
nginx        latest    ae2feff98a0c   11 days ago   133MB
centos       latest    300e315adb2f   2 weeks ago   209MB

2.nginx运行

docker run -d --name nginx01 -p 3334:80 nginx 
-d 后台运行 
--name 给容器命名 
-p 3334:80 将宿主机的端口3334映射到该容器的80端口 
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it nginx01 /bin/bash
Error: No such container: nginx01
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d --name nginx01 -p 3334:80 nginx
20c896637ff5de8be835797109d62ee2465e28d9d716be5a8d550ef7d547fcf5
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS           
20c896637ff5   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 5 seconds   0.0.0.0:3334->80/tcp  

3.配置文件

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it nginx01 /bin/bash
root@20c896637ff5:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@20c896637ff5:/# cd /etc/nginx
root@20c896637ff5:/etc/nginx# ls
conf.d	fastcgi_params	koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params	uwsgi_params  win-utf

4.访问测试

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
20c896637ff5   nginx     "/docker-entrypoint.…"   7 minutes ago   Up 7 minutes   0.0.0.0:3334->80/tcp   nginx01
[root@iZwz99sm8v95sckz8bd2c4Z ~]# curl localhost:3334



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

5.安装vim

先同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。

apt-get update 

我们使用Nginx往往需要编写配置文件,但是Nginx官方镜像没有安装vim,需要我们手动进行安装。

apt-get install vim 

更新完毕再安装即可。我们修改了配置文件,只要重新启动容器docker restart 容器id,改动就可以生效了。

解决vim在终端不能复制的问题:在vim 中输入 :set mouse=r。

启动项目并设置数据卷,为避免nginx因为修改配置文件导致的错误而无法启动容器,我们可以通过cp命令覆盖配置文件,但是设置数据卷会更为方便。启动Nginx容器的同时设置数据卷的命令:

docker run --name my_nginx -d -p 80:80  
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /data/nginx/log:/var/log/nginx 
-v /data/nginx/html:/usr/share/nginx/html/nginx
第一个-v:挂载nginx的主配置文件,以方便在宿主机上直接修改容器的配置文件
第二个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx日志
第三个-v:挂载静态页面目录

10.Tomcat部署

(1)下载并运行

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull tomcat 

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -p 3335:8080 --name tomcat01 tomcat 

(2)进入容器

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec -it tomcat01 /bin/bash 

(3)访问测试

[root@iZwz99sm8v95sckz8bd2c4Z ~]# curl localhost:3335



    
        
        Apache Tomcat/9.0.41
        
        
    

​```

    

11.MySQL部署

(1)下载并运行

# 拉取并运行容器
docker run -d --name mysql-5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 默认账号root 用户的密码。

(2)进入容器查看MySQL服务

docker exec -it 9b3aad6819ff /bin/bash
mysql -h localhost -u root -p

12.宿主机与容器间数据卷

Docker将运用与运行的环境打包形成容器运行, Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在Docker中我们使用数据卷。(在宿主机中新建一个文件与docker容器中需要记录文件关联)

12.1 数据卷创建

12.1.1数据卷创建方法一:

(1)简单使用

docker run -it -v 主机目录:容器目录

(2)查看容器数据卷和其他配置信息信息

docker inspect 容器id 

(3)MySQL容器建立数据卷同步数据

docker run -d -p 6603:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

12.1.2数据卷创建方法二:

(1)创建数据卷

docker volume create my-vol

(2)查看所有的数据卷

$ docker volume ls
local my-vol

(3)查看指定数据卷的信息

$ docker volume inspect my-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]

(4)删除数据卷 docker volume rm ...

$ docker volume rm my-vol

(5)删除容器之时删除相关的卷

$ docker rm -v ...

(6)无主的数据卷可能会占据很多空间,要清理请使用以下命令

$ docker volume prune 

(7)使用 --mount指定创建数据卷

$ docker run -d -P \
--name web \
# -v /src/webapp:/opt/webapp:ro \
--mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \
training/webapp \
python app.py
加了readonly之后,就挂载为只读了。如果你在容器内/src/webapp目录新建文件,会显示如下错误
/src/webapp # touch new.txt
touch: new.txt: Read-only file system

上面的命令挂载主机的/src/webapp目录到容器的/opt/webapp目录。用户可以放置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,如果目录不存在 Docker 会自动为你创建它。

12.2 具名挂载和匿名挂载

(1)匿名挂载

匿名挂载就是在指定数据卷的时候,不指定容器路径对应的主机路径,这样对应映射的主机路径就是默认的路径/var/lib/docker/volumes/中自动生成一个随机命名的文件夹。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx01 -v /etc/nginx nginx
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker volume ls
DRIVER    VOLUME NAME
local     0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26

(2)具名挂载

具名挂载,就是指定文件夹名称,区别于指定路径挂载,这里的指定文件夹名称是在Docker指定的默认数据卷路径下的。通过docker volume ls命令可以查看当前数据卷的目录情况。

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx 
查看指定的数据卷信息的命令:docker volume inspect数据卷名称

(3)匿名挂载、具名挂载、指定路径挂载的命令区别

-v  容器内路径             #匿名挂载
-v  卷名:容器内路径         #具名挂载
-v  /宿主机路径:容器内路径  #指定路径挂载

指定数据卷映射的相关参数:
ro —— readonly 只读。设置了只读则只能操作宿主机的路径,不能操作容器中的对应路径。
rw ----- readwrite 可读可写

[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

12.3Dockerfile中创建数据卷

我们可以在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷。

下面使用Dockerfile构建一个新的镜像,dockerfile01文件的内容,匿名挂载了volume01和volume02两个目录。

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----" 

CMD /bin/bash 
# docker build -f /home/docker-test-volume/dockerfile01 -t ethan/centos:1.0 .
# docker [root@iZwz99sm8v95sckz8bd2c4Z docker-test-volume]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
ethan/centos          1.0       1df90e6fd790   13 minutes ago   209MB
可以看到自动挂载的数据卷目录。下面查看对应宿主机的数据卷目录,可以看到Mounts下有宿主机的挂载目录。因为dockerfile中没有指定宿主机目录,所以属于匿名挂载,在/var/lib/docker/volumes/目录下生成了随机命名的路径。
 "Mounts": [
            {
                "Type": "volume",
                "Name": "c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc",
                "Source": "/var/lib/docker/volumes/c51c75b11a69c526a97a07b03ce2ec74d8e77aa150b736291777c1c204a8aecc/_data",
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "1ae2d34c56c4352ba906b5bc261706b235a07ca2b3c9df6c612bb4380db8983f",
                "Source": "/var/lib/docker/volumes/1ae2d34c56c4352ba906b5bc261706b235a07ca2b3c9df6c612bb4380db8983f/_data",
                "Destination": "volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]

13.容器与容器间数据卷

Docker安装及操作说明_第1张图片

首先启动容器1,volume01、volume02为挂载目录。 
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker run -it --name cnetos01 ethan/centos:1.0 
[root@731d53b8c3d5 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02

然后启动容器2,通过参数--volumes-from,设置容器2和容器1建立数据卷挂载关系。
[root@iZwz99sm8v95sckz8bd2c4Z /]# docker run -it --name centos02 --volumes-from cnetos01 ethan/centos:1.0

首先在容器2中的volume01中添加文件,然后就可以看到容器1的文件也会添加上了
[root@7f90d4147511 /]# cd volume01
[root@7f90d4147511 volume01]# touch test.java
[root@7f90d4147511 volume01]# ls
test.java

13.Dockerfile镜像制作

Dockerfile是用来构建Docker镜像的文本文件,也可以说是命令参数脚本。docker build命令用于从Dockerfile构建镜像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。

13.1.Docker镜像发布的步骤

  • 编写一个dockerfile文件
  • docker build 构建成为一个镜像
  • docker run 镜像
  • docker push 镜像(发布镜像到DockerHub、阿里云镜像仓库)

13.2.Dockerfile指令说明

  • Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
指令 说明
FROM 指定基础镜像
MAINTAINER 镜像是谁写的,姓名+邮箱
RUN 镜像构建的时候需要运行的命令
ADD 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOSE 保留端口配置
CMD 指定这个容器启动的时候要运行的命令(只有最后一个会生效)
EMTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD 当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令,触发指令
COPY 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
ENV 构建的时候设置环境变量

Dockerfile指令的详细语法解释:Dockerfile文件详解

Dockerfile指令介绍的官方文档:https://docs.docker.com/engine/reference/builder/

13.3制作Centos镜像

通过编写Dockerfile文件来制作Centos镜像,并在官方镜像的基础上添加vim和net-tools工具。首先在/home/dockfile 目录下新建文件mydockerfile-centos。然后使用上述指令编写该文件。

[root@iZwz99sm8v95sckz8bd2c4Z dockerfile]# cat mydockerfile-centos
FROM centos
MAINTAINER ethan<[email protected]>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
# docker build -f mydockerfile-centos -t mycentos:1.0 .

逐行解释该Dockerfile文件的指令:

  • FROM centos:该image文件继承官方的centos,后面加冒号如centos:7,用于指定镜像的版本
  • ENV MYPATH /usr/local:设置环境变量MYPATH ,后面有用到
  • WORKDIR $MYPATH:直接使用上面设置的环境变量,指定/usr/local为工作目录
  • RUN yum -y install vim和RUN yum -y install net-tools:在/usr/local目录下,运行yum -y install vim和yum -y install net-tools命令安装工具,注意安装后的所有依赖和工具都会打包到image文件中
  • EXPOSE 80:将容器80端口暴露出来,允许外部连接这个端口
  • CMD:指定容器启动的时候运行命令通过这个dockerfile构建镜像,构建镜像命令:docker build -f dockerfile文件路径 -t 镜像名[:版本号] .(这里有个小点.)
  • 上面命令中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。
[root@iZwz99sm8v95sckz8bd2c4Z dockerfile]# docker run -it mycentos:1.0 

13.4.RUN CMD ENTRYPOINT

  • RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。
  • 注意:指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令
  • CMD :指定容器启动的时候要运行的命令,只有最后一个会生效,不可追加命令。
  • ENTRYPOINT :指定容器启动的时候要运行的命令,命令可以追加

14.发布镜像到DockerHub

  • 1.登录https://hub.docker.com/ DockerHub官网进行注册
  • 2.进行登录,docker login -u 用户名
  • 3.使用docker push命令推送镜像到DockerHub上的仓库
[root@iZwz99sm8v95sckz8bd2c4Z test]# docker images
REPOSITORY                TAG       IMAGE ID       CREATED             SIZE
diytomcat                 1.0       0975df661526   About an hour ago   688MB
ethanhuang824/diytomcat   1.0       0975df661526   About an hour ago   688MB

[root@iZwz99sm8v95sckz8bd2c4Z test]# docker push ethanhuang824/diytomcat:1.0 

因为push的时候,镜像名前面需要加上用户名(ethanhuang824是我的用户名。如果用户名不是当前登录用户则会拒绝push请求),所以需要使用命令docker tag 镜像名 新的镜像名复制出一份镜像重新打个Tag。

15.docker网络组建

了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令

  • CMD :指定容器启动的时候要运行的命令,只有最后一个会生效,不可追加命令。
  • ENTRYPOINT :指定容器启动的时候要运行的命令,命令可以追加

14.发布镜像到DockerHub

  • 1.登录https://hub.docker.com/ DockerHub官网进行注册
  • 2.进行登录,docker login -u 用户名
  • 3.使用docker push命令推送镜像到DockerHub上的仓库
[root@iZwz99sm8v95sckz8bd2c4Z test]# docker images
REPOSITORY                TAG       IMAGE ID       CREATED             SIZE
diytomcat                 1.0       0975df661526   About an hour ago   688MB
ethanhuang824/diytomcat   1.0       0975df661526   About an hour ago   688MB

[root@iZwz99sm8v95sckz8bd2c4Z test]# docker push ethanhuang824/diytomcat:1.0 

因为push的时候,镜像名前面需要加上用户名(ethanhuang824是我的用户名。如果用户名不是当前登录用户则会拒绝push请求),所以需要使用命令docker tag 镜像名 新的镜像名复制出一份镜像重新打个Tag。

15.docker网络组建

你可能感兴趣的:(Linux生态环境,docker,容器,linux)