面向初学者的Docker快速入门指南

时间:2022-07-22
本文章向大家介绍面向初学者的Docker快速入门指南,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Docker快速入门

1.1 安装docker(Linux)

yum源:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo为了速度可以替换文件中的url。

:%s/download.docker.com/mirrors.tuna.tsinghua.edu.cn/docker-ce/g

Docker version 19.03.12, build 48a66213fe

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

dnf list docker-ce
dnf install docker-ce --nobest -y

systemctl start docker
systemctl enable docker

docker -v

1.2 Docker指令

info 系统信息

[root@myserver ~]# docker info
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 18.09.1
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs

version 查看docker版本信息

 [root@myserver ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.39
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:46:54 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.1
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       4c52b90
  Built:            Wed Jan  9 19:06:30 2019
  OS/Arch:          linux/amd64
  Experimental:     false
  wait        Block until one or more containers stop, then print their exit codes

容器的生命周期

search 查找镜像

docker search hello-world

pull 下载镜像(docker hub)

[root@myserver ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

images 查看本地的镜像

[root@myserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB

run 运行容器

  • -i : 交互模式
  • -t:分配一个终端
  • -d:后台运行
  • --name:指定容器的名称
  • -p: 端口绑定
docker run [options] IMAGE 

docker run hello-world

docker run --name mywebserver -it nginx 

[root@myserver ~]# docker run --name mywebserver -itd nginx
8d485b358cc693c1e2b2d9b5c1d1a8092265d79bdcf1ee54d3d2f615f4f22064
[root@myserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8d485b358cc6        nginx               "/docker-entrypoint.…"   6 seconds ago       Up 5 seconds        80/tcp              mywebserver

ps 插件容器进程( -a 所有的,正在运行、已经停止的)

[root@myserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@myserver ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
01bdedde3725        hello-world         "/hello"            2 minutes ago       Exited (0) 2 minutes ago                       hopeful_mendel

rm 删除容器 (-f 强制)

## 指定容器的名称

[root@myserver ~]# docker rm mywebserver
mywebserver
[root@myserver ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
01bdedde3725        hello-world         "/hello"            9 minutes ago       Exited (0) 9 minutes ago                       hopeful_mendel

## 指定容器的ID删除
[root@myserver ~]# docker rm 01bdedde3725
01bdedde3725
[root@myserver ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@myserver ~]#

start/restart/stop/ 容器控制

[root@myserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8d485b358cc6        nginx               "/docker-entrypoint.…"   20 minutes ago      Up 20 minutes       80/tcp              mywebserver
[root@myserver ~]# docker stop mywebserver
mywebserver
[root@myserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@myserver ~]# docker start  mywebserver
mywebserver
[root@myserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8d485b358cc6        nginx               "/docker-entrypoint.…"   21 minutes ago      Up 3 seconds        80/tcp              mywebserver
[root@myserver ~]# docker restart  mywebserver
mywebserver

stats 显示容器使用的资源(CPU)

docker stats mywebserver

[root@myserver ~]# docker stats mywebserver
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
8d485b358cc6        mywebserver         0.00%               2.309MiB / 3.664GiB   0.06%               3.44kB / 0B         0B / 0B             2
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PID

logs 查看容器日志(-f 动态更新)

[root@myserver ~]# docker logs -f  mywebserver
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: IPv6 listen already enabled, exiting
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: IPv6 listen already enabled, exiting
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up

pause/unpause 暂停保存容器的状态

[root@myserver ~]# docker pause mywebserver
mywebserver
[root@myserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS               NAMES
8d485b358cc6        nginx               "/docker-entrypoint.…"   27 minutes ago      Up 5 minutes (Paused)   80/tcp              mywebserver
[root@myserver ~]# docker unpause mywebserver
mywebserver
[root@myserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8d485b358cc6        nginx               "/docker-entrypoint.…"   27 minutes ago      Up 6 minutes        80/tcp              mywebserver
[root@myserver ~]#

rename 重命名

docker rename CONTAINER NEW_NAME

[root@myserver ~]# docker rename mywebserver webserver
[root@myserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8d485b358cc6        nginx               "/docker-entrypoint.…"   29 minutes ago      Up 8 minutes        80/tcp              webserver

inspect 显示容器的详细属性信息

[root@myserver ~]# docker inspect webserver
[
    {
        "Id": "8d485b358cc693c1e2b2d9b5c1d1a8092265d79bdcf1ee54d3d2f615f4f22064",
        "Created": "2020-07-09T01:55:08.20199984Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 6429,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-07-09T02:16:41.996582526Z",
            "FinishedAt": "2020-07-09T02:16:40.968627884Z"
        },

kill 关闭容器进程

[root@myserver ~]# docker kill webserver
webserver
[root@myserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@myserver ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
8d485b358cc6        nginx               "/docker-entrypoint.…"   33 minutes ago      Exited (137) 7 seconds ago                       webserver
[root@myserver ~]#

top 查看容器进程

[root@myserver ~]# docker top webserver
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                7153                7136                0                   22:30               pts/0               00:00:00            nginx: master process nginx -g daemon off;
101                 7211                7153                0                   22:30               pts/0               00:00:00            nginx: worker process
[root@myserver ~]# docker top webserver 7153
PID                 TTY                 STAT                TIME                COMMAND
7153                pts/0               Ss+                 0:00                nginx: master process nginx -g daemon off;
[root@myserver ~]#

exec 进入容器执行命令attach

[root@myserver ~]# docker exec -it webserver bash
root@8d485b358cc6:/# ls

curl 访问服务器nginx  成功

port 显示容器端口绑定信息

[root@myserver ~]# docker port webserver
80/tcp -> 0.0.0.0:8000

cp 文件复制

[root@myserver ~]# docker cp /etc/hosts webserver:/tmp
[root@myserver ~]# docker exec -it webserver ls /tmp
hosts
[root@myserver ~]# docker cp webserver:/tmp/hosts ./
[root@myserver ~]# ls hosts
hosts

diff 容器文件系统发生的变化

[root@myserver ~]# docker diff webserver
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /run
A /run/nginx.pid
C /tmp
A /tmp/hosts
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp

export 导出容器文件系统到本地归档

[root@myserver ~]# docker export -o test.tar  webserver
[root@myserver ~]# mkdir docker
[root@myserver ~]# mv test.tar  docker/

[root@myserver ~]# cd docker/
[root@myserver docker]# ls
test.tar
[root@myserver docker]# tar xf test.tar
l[root@myserver docker]# ls
bin   dev                  docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  test.tar  usr
boot  docker-entrypoint.d  etc                   lib   media  opt  root  sbin  sys  tmp       var
[root@myserver docker]# cd tmp/
[root@myserver tmp]# ls
hosts

import 导入压缩文件到镜像

[root@myserver docker]# ls
bin   dev                  docker-entrypoint.sh  etc   lib    media  opt   root  sbin  sys       tmp  var
boot  docker-entrypoint.d  Dockerfile            home  lib64  mnt    proc  run   srv   test.tar  usr
[root@myserver docker]# docker import  test.tar  webserver:v2
sha256:5aa7a154ce2f07e8dc94d331d8809ea40ea5fab4ffa8935e2092771f863e3c0f
[root@myserver docker]# docker history webserver:v2
IMAGE               CREATED             CREATED BY          SIZE                COMMENT
5aa7a154ce2f        15 seconds ago                          130MB               Imported from -
[root@myserver docker]#

镜像操作

history 查看镜像的更新历史

[root@myserver ~]# docker history nginx
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
2622e6cca7eb        4 weeks ago         /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  STOPSIGNAL SIGTERM           0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  EXPOSE 80                    0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B
<missing>           4 weeks ago         /bin/sh -c #(nop) COPY file:cc7d4f1d03426ebd…   1.04kB
<missing>           4 weeks ago         /bin/sh -c #(nop) COPY file:b96f664d94ca7bbe…   1.96kB
<missing>           4 weeks ago         /bin/sh -c #(nop) COPY file:d68fadb480cbc781…   1.09kB
<missing>           4 weeks ago         /bin/sh -c set -x     && addgroup --system -…   62.9MB
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV NJS_VERSION=0.4.1        0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV NGINX_VERSION=1.19.0     0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           4 weeks ago         /bin/sh -c #(nop) ADD file:4d35f6c8bbbe6801c…   69.2MB

login /logout Docker registry

[root@myserver ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: devopsvip
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@myserver ~]#

[root@myserver ~]# docker logout
Removing login credentials for https://index.docker.io/v1/

search 查找镜像

docker search hello-world

pull 下载镜像(docker hub)

[root@myserver ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

images 查看本地的镜像

[root@myserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB

tag重命名

[root@myserver ~]# docker tag hello-world:latest devopsvip/docker:latest
[root@myserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              2622e6cca7eb        4 weeks ago         132MB
centos              7                   b5b4d78bc90c        2 months ago        203MB
devopsvip/docker    latest              bf756fb1ae65        6 months ago        13.3kB
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB

push 上传镜像到镜像仓库

[root@myserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              2622e6cca7eb        4 weeks ago         132MB
centos              7                   b5b4d78bc90c        2 months ago        203MB
devopsvip/docker    latest              bf756fb1ae65        6 months ago        13.3kB
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB
[root@myserver ~]# docker push devopsvip/docker:latest
The push refers to repository [docker.io/devopsvip/docker]
9c27e219663c: Preparing
denied: requested access to the resource is denied
[root@myserver ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: devopsvip
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@myserver ~]# docker push devopsvip/docker:latest
The push refers to repository [docker.io/devopsvip/docker]
9c27e219663c: Mounted from library/hello-world
latest: digest: sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 size: 525

rmi 删除镜像

[root@myserver ~]# docker rmi devopsvip/docker:latest
Untagged: devopsvip/docker:latest
Untagged: devopsvip/docker@sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042
[root@myserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              2622e6cca7eb        4 weeks ago         132MB
centos              7                   b5b4d78bc90c        2 months ago        203MB
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB
[root@myserver ~]#

commit 将容器变化为镜像

[root@myserver ~]# docker commit -a "devopsvipxx" -m "hhahh" webserver webserver:v1
sha256:d315f2bb406067262798358e85aaef06f2d99dfc1adbc8380dd9cc5d0f809e76
[root@myserver ~]# docker history webserver:v1
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
d315f2bb4060        2 seconds ago       nginx -g daemon off;                            1.39kB              hhahh
2622e6cca7eb        4 weeks ago         /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  STOPSIGNAL SIGTERM           0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  EXPOSE 80                    0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B
<missing>           4 weeks ago         /bin/sh -c #(nop) COPY file:cc7d4f1d03426ebd…   1.04kB
<missing>           4 weeks ago         /bin/sh -c #(nop) COPY file:b96f664d94ca7bbe…   1.96kB
<missing>           4 weeks ago         /bin/sh -c #(nop) COPY file:d68fadb480cbc781…   1.09kB
<missing>           4 weeks ago         /bin/sh -c set -x     && addgroup --system -…   62.9MB
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV NJS_VERSION=0.4.1        0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  ENV NGINX_VERSION=1.19.0     0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
<missing>           4 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           4 weeks ago         /bin/sh -c #(nop) ADD file:4d35f6c8bbbe6801c…   69.2MB

build 构建镜像

Dockerfile

FROM nginx



docker build .
docker build -f aa/Dockerfile .

[root@myserver docker]# docker build .
Sending build context to Docker daemon  269.2MB
Step 1/1 : FROM webserver:v1
 ---> d315f2bb4060
Successfully built d315f2bb4060
[root@myserver docker


[root@myserver docker]# docker build -t webserver:v2  .
Sending build context to Docker daemon  269.2MB
Step 1/1 : FROM webserver:v1
 ---> d315f2bb4060
Successfully built d315f2bb4060
Successfully tagged webserver:v2

load 通过归档文件加载镜像 save 将镜像制作归档文件

[root@myserver docker]# docker save -o webserver-v2.tar webserver:v2
[root@myserver docker]# docker rmi webserver:v2
Untagged: webserver:v2
Deleted: sha256:5aa7a154ce2f07e8dc94d331d8809ea40ea5fab4ffa8935e2092771f863e3c0f
Deleted: sha256:eef9ee7ccbdfd908b67057aa17a6d7292bbc0e7cb04a57896d25ce24a6e115b7

[root@myserver docker]# docker load -i webserver-v2.tar
eef9ee7ccbdf: Loading layer  134.6MB/134.6MB
Loaded image: webserver:v2
[root@myserver docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
webserver           v2                  5aa7a154ce2f        18 hours ago        130MB
webserver           v1                  d315f2bb4060        18 hours ago        132MB
<none>              <none>              46a71bf11111        18 hours ago        132MB
<none>              <none>              5ab53db1229d        18 hours ago        132MB
nginx               latest              2622e6cca7eb        4 weeks ago         132MB
centos              7                   b5b4d78bc90c        2 months ago        203MB
devopsvip/docker    latest              bf756fb1ae65        6 months ago        13.3kB
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB
[root@myserver docker]#

create 创建一个容器

[root@myserver docker]# docker create --name webnewserver nginx
bbc81d2c72831167da41a6ccda4e06e6efe51eba81cf6daace0f49e5815e88db
[root@myserver docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@myserver docker]# docker ps  -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                  NAMES
bbc81d2c7283        nginx               "/docker-entrypoint.…"   17 seconds ago      Created                                              webnewserver
d2813b963195        nginx               "/docker-entrypoint.…"   19 hours ago        Created                                              youthful_ramanujan
4fe81888bdd1        nginx               "/docker-entrypoint.…"   24 hours ago        Exited (255) 11 minutes ago   0.0.0.0:8000->80/tcp   webserver
[root@myserver docker]# docker start  webnewserver
webnewserver
[root@myserver docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
bbc81d2c7283        nginx               "/docker-entrypoint.…"   41 seconds ago      Up 4 seconds        80/tcp              webnewserver
[root@myserver docker]#

update 更新容器的配置

[root@myserver docker]# docker update --memory 1G --memory-swap 1G  webaserver

[root@myserver docker]# docker stats webaserver
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
bd8375d39858        webaserver          0.00%               2.445MiB / 1GiB     0.24%               3.69kB / 0B

前端项目容器化

1.1 手动部署前端项目

npm 安装, 直接输入npm指令,centos8 中会提示你安装。也可以手动安装nodejs环境。

git clone https://github.com/dockersamples/node-bulletin-board
cd node-bulletin-board/bulletin-board-app
npm install 

[root@myserver bulletin-board-app]# npm install

> ejs@2.7.4 postinstall /root/newdocker/node-bulletin-board/bulletin-board-app/node_modules/ejs
> node ./postinstall.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN vue-event-bulletin@1.0.0 No repository field.
npm WARN The package morgan is included as both a dev and production dependency.

added 91 packages from 168 contributors and audited 92 packages in 10.751s
found 0 vulnerabilities


[root@myserver bulletin-board-app]# npm start

> vue-event-bulletin@1.0.0 start /root/newdocker/node-bulletin-board/bulletin-board-app
> node server.js

Magic happens on port 8080...

访问:http://192.168.1.105:8080/#


1.2 使用docker完成

编写dockerfile

FROM node:current-slim    ## 基础镜像

WORKDIR /usr/src/app      ## 指定工作目录
COPY package.json .       ## 复制package.json
RUN npm install      ## 进行安装

EXPOSE 8080        ## 端口
CMD [ "npm", "start" ]  ## 运行npm start

COPY . .         ## 复制当前目录内容

构建生成镜像

docker build  -t bulletinboard:1.0 .
docker build --tag bulletinboard:1.0 .

创建容器

[root@myserver bulletin-board-app]# docker run -itd --name bb -p 8000:8080 bulletinboard:1.0
a0316d74ef5d943414a065ac147427c00c67cf393dd582ba967e1ffb016f1faa
[root@myserver bulletin-board-app]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
a0316d74ef5d        bulletinboard:1.0   "docker-entrypoint.s…"   9 seconds ago       Up 7 seconds        0.0.0.0:8000->8080/tcp   bb




####
-p: --publish 
-d: --detach

访问8000端口

删除容器

docker stop bb
docker rm bb
docker rmi  bulletinboard:1.0



docker rm --force bb
docker rmi  bulletinboard:1.0

1.3 上传镜像仓库

登录docker hub 创建一个仓库 命名为 bulletinboard.

[root@myserver bulletin-board-app]# docker tag bulletinboard:1.0 devopsvip/bulletinboard:1.0
[root@myserver bulletin-board-app]# docker push devopsvip/bulletinboard:1.0
The push refers to repository [docker.io/devopsvip/bulletinboard]

ec3c84f0ff74: Pushed
8783c0df2a9c: Pushed
d3e283a0a9a4: Pushed
0e25f1fd8714: Mounted from library/node
203a5e3508e7: Mounted from library/node
c7e05f78fd37: Mounted from library/node
90a1d8ebd7b4: Mounted from library/node
333e2cb4c707: Mounted from library/node
1.0: digest: sha256:420b025a1db705a1709783d028cd5a71825c47c969b5dab8c284a8afd18f2833 size: 1992

FAQ

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied


## 解决方法
[usera@myserver ~]$ ll /var/run/docker.sock
srw-rw---- 1 root docker 0 Jul  8 21:26 /var/run/docker.sock
[usera@myserver ~]$ exit
logout
[root@myserver ~]# usermod -g docker usera
[root@myserver ~]# id usera
uid=1013(usera) gid=965(docker) 组=965(docker)
[root@myserver ~]# su - usera
[usera@myserver ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker: Error response from daemon: Conflict. The container name "/mywebserver" is already in use by container "768c4b899b6736dbef696908873a3db502c252f7d8a3c65d901af72e1bdc17dd". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

解决方法
1. 更改名称 docker run --name mywebserver01 -it nginx 
2. 删除容器

[root@myserver ~]# docker rm mywebserver
mywebserver
[root@myserver ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
01bdedde3725 s ago       Exited (0) 9 minutes ago                       hopeful_mendel
[root@myserver ~]# dcoker rm 01bdedde3725
bash: dcoker: 未找到命令...
相似命令是: 'docker'
[root@myserver ~]# docker rm 01bdedde3725
01bdedde3725
[root@myserver ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@myserver ~]#
Error response from daemon: Container 8d485b358cc693c1e2b2d9b5c1d1a8092265d79bdcf1ee54d3d2f615f4f22064 is not running  

解决方法: 容器未运行需要重新启动

如何能够外部访问nginx?-p 端口绑定 宿主机端口:容器服务端口

[root@myserver ~]# docker stop webserver
webserver
[root@myserver ~]# docker rm webserver
webserver
[root@myserver ~]# docker run --name webserver -p 8000:80 -itd nginx
4fe81888bdd163ae149fa4c60ddb41c4727d6120ee7203fa2933601df9ab1733
[root@myserver ~]# docker port webserver
80/tcp -> 0.0.0.0:8000
[root@myserver ~]# curl 127.0.0.1:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

如何注册docker hub账号, devopsvip / passxxxxxx

这里选择免费版本

邮件激活

无法上传docker镜像

denied: requested access to the resource is denied

## 解决方法
docker login

无法下载镜像

Error response from daemon: pull access denied for devopsvip/docker, repository does not exist or may require 'docker login'

## 解决方法
docker login

如何将本机的镜像复制到远程的机器?

本机:192.168.1.199

[root@myserver docker]# docker save -o webserver-v2.tar webserver:v2
[root@myserver docker]# ls
bin   docker-entrypoint.d   etc   lib64  opt   run   sys       usr
boot  docker-entrypoint.sh  home  media  proc  sbin  test.tar  var
dev   Dockerfile            lib   mnt    root  srv   tmp       webserver-v2.tar
[root@myserver docker]# scp webserver-v2.tar  root@192.168.1.200:/tmp/

远程机器:192.168.1.200

[root@zeyang-nuc-service tmp]# docker load -i webserver-v2.tar
eef9ee7ccbdf: Loading layer  134.6MB/134.6MB
Loaded image: webserver:v2
[root@zeyang-nuc-service tmp]# docker images | grep webserver
webserver                                                                                            v2                              5aa7a154ce2f        18 hours ago        130MB