docker

4 篇文章 0 订阅
3 篇文章 0 订阅

安装Docker

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun

配置加速器

Ubuntu 16.04+、Debian 8+、CentOS 7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ]
}

重启docker

$ sudo systemctl restart docker

下载

从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull tomcat

镜像与容器

查看镜像

docker images
docker image rm id
docker rmi  id 
# 删除虚悬镜像
docker  image prune

启动容器


root@ubuntu:~# docker run -p 8080:8080 tomcat

#指定启动容器的名字
root@ubuntu:~# docker run -p 8080:8080 --name tomcat tomcat
# 以交互式的方式 启动容器
root@ubuntu:~# docker run -it tomcat bash
# 以交互式的方式 进入容器
root@ubuntu:~# docker exec -it  id bash
root@ubuntu:~# docker pull ubuntu:16.04

root@ubuntu:~# docker run -it --rm \
> ubuntu:16.04 \
> bash
root@ac8619b035a1:/# ls

docker run 就是运行容器的命令,我们这里简要的说明一下上面用到的参数。

-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器。
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

守护态运行

root@ubuntu:~# docker run -P --name tomcat -d  hzz 
e33e8759f47a3944d2cd5fad78ca5ee3f41f2ae4a7cfd86495cc5a33cc910293

查看容器

root@ubuntu:~# docker ps -a 

删除容器

root@ubuntu:~# docker rm cb6f5753e84f

删除所有未运行的容器
root@ubuntu:~# docker container prune

停止容器

# id或名字
root@ubuntu:~# docker stop ebe2d3571b05
root@ubuntu:~# docker container stop tomcat

重新启动容器

root@ubuntu:~# docker restart ab54eb8dabd8

Dockerfile

FROM 指定基础镜像

RUN 执行命令

shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。

exec 格式:RUN [“可执行文件”, “参数1”, “参数2”],这更像是函数调用中的格式。

#Dockerfile
FROM tomcat
RUN echo "hello docker" > /usr/local/tomcat/webapps/ROOT/index.html

构建镜像

root@ubuntu:/usr/local/docker/tomcat# docker build -t hzz .

镜像构建上下文(Context)

如果注意,会看到 docker build 命令最后有一个 .。. 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为这个路径是在指定 Dockerfile 所在路径,这么理解其实是不准确的。如果对应上面的命令格式,你可能会发现,这是在指定上下文路径。

COPY 复制文件

COPY <源路径>... <目标路径>
COPY ["<源路径1>",... "<目标路径>"]

ADD 更高级的复制文件

ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。

比如 <源路径> 可以是一个 URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到 <目标路径> 去。下载后的文件权限自动设置为 600,如果这并不是想要的权限,那么还需要增加额外的一层 RUN 进行权限调整,另外,如果下载的是个压缩包,需要解压缩,也一样还需要额外的一层 RUN 指令进行解压缩。所以不如直接使用 RUN 指令,然后使用 wget 或者 curl 工具下载,处理权限、解压缩、然后清理无用文件更合理。因此,这个功能其实并不实用,而且不推荐使用。

如果 <源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去。

端口映射

生成随机端口映射容器
root@ubuntu:~# docker run -P hzz 

使用宿主机端口 8080 映射 容器8080端口
root@ubuntu:~# docker run -p 8080:8080 hzz 

CMD 容器启动命令

CMD 指令的格式和 RUN 相似,也是两种格式:

shell 格式:CMD <命令>
exec 格式:CMD [“可执行文件”, “参数1”, “参数2”…]
参数列表格式:CMD [“参数1”, “参数2”…]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。

EXPOSE 暴露端口

格式为 EXPOSE <端口1> [<端口2>…]。

数据卷

root@ubuntu:/usr/local/docker/tomcat/ROOT# docker run -p 8080:8080 --name tomcat -d -v /usr/local/docker/tomcat/ROOT:/usr/local/tomcat/webapps/ROOT tomcat

启动mysql

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22

-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v /usr/local/docker/mysql/conf:/etc/mysql:将主机当前目录下的 conf 挂载到容器的 /etc/mysql
-v /usr/local/docker/mysql/logs:/var/log/mysql:将主机当前目录下的 logs 目录挂载到容器的 /var/log/mysql
-v /usr/local/docker/mysql/data:/var/lib/mysql:将主机当前目录下的 data 目录挂载到容器的 /var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码

复制容器内容到主机

root@ubuntu:/usr/local/docker/mysql/conf# docker cp mysql:/etc/mysql .

Docker-compose

安装Docker-compose

root@ubuntu:/etc/docker# curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

root@ubuntu:/etc/docker# cd /usr/local/bin/

root@ubuntu:/usr/local/bin# chmod +x docker-compose 

root@ubuntu:/usr/local/bin# docker-compose version
docker-compose version 1.22.0, build f46880fe
docker-py version: 3.4.1
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0f  25 May 2017

docker-compose.yml

root@ubuntu:/usr/local/docker/tomcat# vim docker-compose.yml
root@ubuntu:/usr/local/docker/tomcat# cat docker-compose.yml 
version: '3'
services:
  tomcat:
    restart: always
    image: tomcat
    container_name: tomcat
    ports:
      - 8080:8080

启动docker-compose

root@ubuntu:/usr/local/docker/tomcat# docker-compose up

docker-compose mysql配置

version: '3.1'
services:
  mysql:
    restart: always
    image: mysql:5.7.22
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

GitLab docker-compose配置

version: '3'
services:
    web:
      image: 'twang2218/gitlab-ce-zh'
      restart: always
      hostname: '192.168.85.132'
      environment:
        TZ: 'Asia/Shanghai'
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'http://192.168.85.132'
          gitlab_rails['gitlab_shell_ssh_port'] = 2222
          unicorn['port'] = 8888
          nginx['listen_port'] = 80
      ports:
        - '80:80'
        - '8443:443'
        - '2222:22'
      volumes:
        - /usr/local/docker/gitlab/config:/etc/gitlab
        - /usr/local/docker/gitlab/data:/var/opt/gitlab
        - /usr/local/docker/gitlab/logs:/var/log/gitlab 

nexus docker-compose.yml

version: '3.1'
services:
nexus:
  restart: always
  image: sonatype/nexus3
  container_name: nexus
  ports:
    - 8081:8081
  volumes:
    - /usr/local/docker/nexus/data:/nexus-data

register docker-compose.yml

version: '3.1'
services:
  registry:
    image: registry
    restart: always
    container_name: registry
    ports:
      - 5000:5000
    volumes:
      - /usr/local/docker/registry/data:/var/lib/registry
 #配置webUI
  frontend:
    image: konradkleine/docker-registry-frontend:v2
    ports:
      - 8080:80
    volumes:
      - ./certs/frontend.crt:/etc/apache2/server.crt:ro
      - ./certs/frontend.key:/etc/apache2/server.key:ro
    environment:
      - ENV_DOCKER_REGISTRY_HOST=192.168.85.132
      - ENV_DOCKER_REGISTRY_PORT=5000

添加权限

chmod 777 /usr/local/docker/nexus/data

配置register 客户端

root@ubuntu:/etc/docker# vim daemon.json

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
   "insecure-registries": [
    "192.168.85.132:5000"
  ]
}
#重启docker服务
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
#检查配置
root@ubuntu:/etc/docker# docker info
-------------------------------
Insecure Registries:
 192.168.85.132:5000
 127.0.0.0/8
-------------------------------

上传本机镜像到register

标记本地镜像
root@ubuntu:/etc/docker# docker tag tomcat 192.168.85.132:5000/tomcat
push 192.168.85.132:5000/tomcat 
root@ubuntu:/etc/docker# docker push 192.168.85.132:5000/tomcat
查看全部镜像
http://192.168.85.132:5000/v2/_catalog
http://192.168.85.132:5000/v2/tomcat/tags/list
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值