Docker 基本使用教程 - 学会 docker 看懂这篇文章就够了

296次阅读
没有评论

共计 6249 个字符,预计需要花费 16 分钟才能阅读完成。

一、Docker是什么

Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

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

二、Docker 安装

1. Centos安装与卸载

手动卸载旧版本

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

使用官方安装脚本安装

curl -fsSL https://get.docker.com | bash -s docker --mirror aliyun

2. Windows安装

点击 控制面板 - 程序 - 启用或关闭Windows功能,开启Hyper-V。

进入 docker官网 下载Docker Desktop,双击进行安装

三、Docker 镜像

1. 获取镜像

$ docker pull docker/getting-started

2. 列出镜像列表

$ docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
ubuntu                   latest    1318b700e415   3 weeks ago    72.8MB
mysql                    5.7.35    8cf625070931   3 weeks ago    448MB
mysql                    8.0.26    c60d96bd2b77   3 weeks ago    514MB
docker/getting-started   latest    083d7564d904   2 months ago   28MB
  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

3. 查找镜像

$ docker search httpd
NAME     DESCRIPTION                                  STARS     OFFICIAL   AUTOMATED
httpd    The Apache HTTP Server Project               3628          [OK]
  • NAME: 镜像仓库源的名称

  • DESCRIPTION: 镜像的描述

  • OFFICIAL: 是否 docker 官方发布

  • STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。

  • AUTOMATED: 自动构建。

4. 删除镜像

$ docker rmi docker/getting-started

四、Docker 容器

1. 启动容器

$ docker run -d -p 80:80 docker/getting-started

参数说明:

  • -d:后台运行
  • -p:指定暴露端口

可通过 docker run --help 命令查看参数作用

2. 停止容器运行

$ docker stop d6340abacfa7 # 容器ID

3. 查看所有容器

$ docker ps -a

该命令将列出所有运行中的容器和已停止的容器

4. 启动已停止运行的容器

$ docker start d6340abacfa7 # 容器ID
$ docker restart d6340abacfa7 # 容器ID

5. 容器交互

对于可以交互的容器,可以进入到容器内部,进行相关操作。

$ docker pull ubuntu    # 拉取ubuntu镜像
$ docker run -it ubuntu /bin/bash # 启动容器并进入容器内部

参数说明:

  • -i: 以交互模式运⾏容器,通常与 -t 同时使⽤
  • -t:为容器重新分配⼀个伪输⼊终端,通常与 -i 同时使⽤

6. 进入容器

$ docker run -itd ubuntu # 启动容器并以后台方式运行

当容器以参数 -d 进入后台, 此时想要进入容器,可使用 docker attachdocker exec 进入容器,推荐使用 docker exec

$ docker exec -it 4d2516648ce0 /bin/bash

7. 退出容器内部

比如想退出ubuntu容器内部,使用exit退出。

root@4d2516648ce0:/# exit

8. 删除容器

直接删除报错

$ docker rm 4d2516648ce0
Error response from daemon: You cannot remove a running container 4d2516648ce085a97d147bc3b8beef02e81f6e77c5ea2a012d572104963f4154. Stop the container before attempting removal or force remove

在删除容器之前,需要先停止运行容器

$ docker stop 4d2516648ce0
$ docker rm 4d2516648ce0

五、容器连接

创建一个 python 应用的容器

$ docker run -d -P training/webapp python app.py
a1d62312db4e3041772cf567607ed6a9995bc39f73f8990af0e9c760fd5de775
$ docker ps
CONTAINER ID   IMAGE             COMMAND           CREATED              STATUS              PORTS                                         NAMES
a1d62312db4e   training/webapp   "python app.py"   About a minute ago   Up About a minute   0.0.0.0:55000->5000/tcp, :::55000->5000/tcp   adoring_swartz

1. 网络端口映射

(1)指定端口

两种方式的区别是:

  • -P :是容器内部端口随机映射到主机的高端口。
  • -p : 是容器内部端口绑定到指定的主机端口。
$ docker run -d -p 5000:5000 training/webapp python app.py
732f30ae05ae03cb7de71dca186a4d667960fbbcf4f417de9c11a6dac41d5228
$ docker ps
CONTAINER ID   IMAGE             COMMAND           CREATED         STATUS         PORTS                                         NAMES
732f30ae05ae   training/webapp   "python app.py"   6 seconds ago   Up 3 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp     fervent_ride
a1d62312db4e   training/webapp   "python app.py"   7 minutes ago   Up 6 minutes   0.0.0.0:55000->5000/tcp, :::55000->5000/tcp   adoring_swartz

(2)指定网络地址

$ docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
3c10889d00dc140043175745987d169227e6a06d648a9deb641156b6ec4499cc
$ docker ps
CONTAINER ID   IMAGE             COMMAND           CREATED          STATUS          PORTS                                         NAMES
3c10889d00dc   training/webapp   "python app.py"   20 seconds ago   Up 18 seconds   127.0.0.1:5001->5000/tcp                      reverent_goldberg
732f30ae05ae   training/webapp   "python app.py"   3 minutes ago    Up 3 minutes    0.0.0.0:5000->5000/tcp, :::5000->5000/tcp     fervent_ride
a1d62312db4e   training/webapp   "python app.py"   10 minutes ago   Up 9 minutes    0.0.0.0:55000->5000/tcp, :::55000->5000/tcp   adoring_swartz

(3)指定 UDP 端口

$ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
1192a45b607a3c8e364f8227c650ead85fff80fd0edb794a72f1e5a1b16b3114
$ docker ps
CONTAINER ID   IMAGE             COMMAND           CREATED              STATUS              PORTS                                         NAMES
1192a45b607a   training/webapp   "python app.py"   17 seconds ago       Up 15 seconds       5000/tcp, 127.0.0.1:5000->5000/udp            bold_shaw
3c10889d00dc   training/webapp   "python app.py"   About a minute ago   Up About a minute   127.0.0.1:5001->5000/tcp                      reverent_goldberg
732f30ae05ae   training/webapp   "python app.py"   4 minutes ago        Up 4 minutes        0.0.0.0:5000->5000/tcp, :::5000->5000/tcp     fervent_ride
a1d62312db4e   training/webapp   "python app.py"   11 minutes ago       Up 11 minutes       0.0.0.0:55000->5000/tcp, :::55000->5000/tcp   adoring_swartz

2. Docker 容器互联

(1)创建一个Docker网络

$ docker network create -d bridge test-net
7edbd75ff78c01ad5f5eb7872f7965d57e6cb98a7df80dc7cb47d3dfef179891
$ docker network ls
NETWORK ID     NAME       DRIVER    SCOPE
d2e544c3d9da   bridge     bridge    local
efab27602b34   host       host      local
b1a535169706   none       null      local
7edbd75ff78c   test-net   bridge    local

(2)连接容器

运行一个容器并连接到新建的 test-net 网络

$ docker run -itd --name test1 --network test-net ubuntu /bin/bash

打开新的终端,再运行一个容器并加入到 test-net 网络

$ docker run -itd --name test2 --network test-net ubuntu /bin/bash

(3)测试

当前容器没有ping命令

$ docker exec -it test1 /bin/bash
root@19440cb02ddd:/# ping www.baidu.com
bash: ping: command not found

安装ping命令

apt-get update
apt install iputils-ping

在 test1 容器输入以下命令

root@19440cb02ddd:/# ping test2
PING test2 (172.18.0.3) 56(84) bytes of data.
64 bytes from test2.test-net (172.18.0.3): icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from test2.test-net (172.18.0.3): icmp_seq=2 ttl=64 time=0.124 ms
64 bytes from test2.test-net (172.18.0.3): icmp_seq=3 ttl=64 time=0.121 ms

同理在 test2 容器也会成功连接到

root@2f15a07298ae:/# ping test1
PING test1 (172.18.0.2) 56(84) bytes of data.
64 bytes from test1.test-net (172.18.0.2): icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from test1.test-net (172.18.0.2): icmp_seq=2 ttl=64 time=0.122 ms
64 bytes from test1.test-net (172.18.0.2): icmp_seq=3 ttl=64 time=0.119 ms

六、仓库管理

1. 注册

https://hub.docker.com 免费注册一个 Docker 账号

2. 登陆与退出

$ 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: hausen1012
Password:
Login Succeeded
$ docker logout # 退出
Removing login credentials for https://index.docker.io/v1/

3. 推送镜像

$ docker images 
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
docker/getting-started   latest    083d7564d904   2 months ago   28MB
$ docker tag docker/getting-started docker:v1 # 标记本地镜像,将其归入docker仓库
$ docker images 
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
docker/getting-started   latest    083d7564d904   2 months ago   28MB
docker                   v1        083d7564d904   2 months ago   28MB
$ docker push docker:v1 # 推送镜像

七、打包镜像

1 克隆 mblog 源码

git clone https://gitee.com/hausen1012/mblog.git

2 打包

mvn clean package

3 Dockerfile

FROM acaiee/alpine-java:cst

WORKDIR /app/mblog

COPY /mblog-latest.jar app.jar

ENV JAVA_OPTS="\
-Xms128m \
-Xmx512m \
-XX:MetaspaceSize=128m \
-XX:MaxMetaspaceSize=512m"

EXPOSE 8080

ENTRYPOINT java ${JAVA_OPTS} -jar app.jar

4 制作镜像

将 jar 包与 Dockerfile 放在同一目录。

docker build -t hausen1012/unipower-blog .

5 运行

docker run -d \
--name mblog \
-p 80:8080 \
-v /docker/mblog/storage:/app/mblog/storage \
-v /docker/mblog/logs:/app/mblog/logs \
-e DB_HOST="localhost" \
-e DB_PORT="3306" \
-e DB_NAME="mblog" \
-e DB_USER="root" \
-e DB_PWD="123456" \
hausen1012/unipower-blog

提醒:本文发布于472天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 
阿蛮君
版权声明:本站原创文章,由 阿蛮君 2023-04-10发表,共计6249字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2022-2024 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 蓝易云CDN 提供安全防护和加速服务
Powered by Wordpress  Theme by Puock