Ubuntu安装Docker
使用脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
Docke镜像加速器
- 修改/etc/docker/darmon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
- 然后重新启动服务
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker镜像
- 获取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库号[:标签]
具体的选项可以通过docker pull --help命令看到。
- Docker镜像仓库地址:地址的格式一般是<域名/IP>[:端口号]。默认地址是Docker Hub。
- 仓库名:如之前所说,这里的仓库名是两段式名称,即<用户名>/<软件名>,对于Docker Hub,如果不给出用户名,则默认为library,也就是官方镜像。
比如:
root@Ubuntu:~# docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
3386e6af03b0: Pull complete
49ac0bbe6c8e: Pull complete
d1983a67e104: Pull complete
1a0f3a523f04: Pull complete
Digest: sha256:181800dada370557133a502977d0e3f7abda0c25b9bbb035f199f5eb6082a114
Status: Downloaded newer image for ubuntu:16.04
docker.io/library/ubuntu:16.04
- 镜像运行容器
docker run -it --rm ubuntu:16.04 bash
- -it:-i(交互式操作),-t(终端)
- -rm:退出容器时同时把容器删除
- ubuntu:16.04:指定启动容器的镜像
- bash:用于交互的Shell
- 镜像体积
- 虚悬镜像
<!--删除虚悬镜像方法-->
docker image prune
- 删除本地镜像
docker image rm imagesId
docker rmi ubuntu:18.04
- 使用dockerFile定制镜像
- 在一个空白目录中,建立一个文本文件,命名为Dockerfile:
mkdir mynginx
cd mynginx
touch Dockerfile
<!--Dockerfile的内容如下-->
<!--FROM tomcat:8.0
WORKDIR /usr/local/tomcat/webapps/ROOT/
RUN rm -fr *
RUN echo "Hello, Docker!" > /usr/local/tomcat/webapps/ROOT/index.html
* FROM(指定基础镜像)-必填
* WORKDIR(切换目录到指定路径)等同于cd的功能
* RUN<命令>(执行命令)
* COPY 复制文件
* ADD更高级的复制文件
* CMD容器启动命令
* ENTRYPOINT入口点
* ENV设置环境变量
* VOLUME定义匿名卷
* EXPOSE暴露端口
* WORKDIR指定工作目录
-->
- 构建镜像
docker build -t myproject .
- 构建镜像上下文
Dockerfile指令
- COPY(原路径可以是通配符,满足Go的filepath.Match规则即可)
- COPY<原路径>...<目标路径>
- COPY["<原路径1>",..."<目标路径>"]
FROM tomcat:8.0
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -fr *
COPY fczj-frontend-web.zip .
RUN unzip fczj-frontend-web.zip
RUN rm -rf fczj-frontend-web.zip
WORKDIR /usr/local/tomcat
- ADD(在COPY的基础上增加了一些功能)
- 如果<源路径>是一个tar压缩文件,格式为gzip,bzip2以及xz时ADD指令会自动解压文件到指定目录。
FROM tomcat:8.0
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -fr *
ADD myproject.tar.gz .
WORKDIR /usr/local/tomcat
- EXPOSE<端口1>[<端口2>...]
- EXPOSE指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口。
- CMD指令
- 用于指定默认的容器主进程的启动命令
CMD["catalina.sh", "run"]
- ENV
- 用于设置环境变量
操作Docker容器
- 查看正在运行的docker容器
docker ps -a
2.重启docker容器
docker restart <容器ID或容器名称>
- 指定容器名称
docker run -p 8080:8080 --name tomcat tomcat
- 暂停docker容器
docker stop <容器ID或名称>
- 守护态运行(后台运行)
docker run -p 8080:8080 --name tomcat -d tomcat
- 进入容器
docker exec -it <容器ID或名称> bash
- 清理所有未运行的容器
docker container prune
Docker数据卷(Docker容器的数据持久化)
- 创建一个数据卷
docker run -p 8080:8080 --name tomcat -d -v /usr/local/docker/tomcat/ROOT:/usr/local/tomcat/webapps/ROOT tomcat:8.0
docker部署数据库mySql
- 拉去mySql的镜像
docker pull mysql:5.7.22
- 启动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
- 将容器的文件复制到宿主机
docker cp mysql:/etc/mysql .
Docker三剑客之Compose(快速部署分布式应用)
- Compose中有两个重要概念
- 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。
- Compose的下载和安装
- 直接下载对应的二进制包
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
- 配置一个docker-compose.yml文件
version: '3'
services:
tomcat:
restart: always
image: tomcat:8.5.50
container_name: tomcat
ports:
- 8080:8080
- 使用docker-compose
启动docker容器
<!--在有docker-compose.yml目录下执行-->
docker-compose up
<!--指定docker-compose.yml目录的执行-->
docker-compose -f <路径> up
<!--docker-compose守护态运行-->
docker-compose up -d
关闭docker容器
docker-compose down
查看docker运行日志
docker-compose logs -f tomcat
使用docker-compose部署项目
- 添加配置文件docker-compose.yml
version: '3'
services:
web:
restart: always
image: tomcat:9-jre8
container_name: web
ports:
- 8080:8080
volumes:
- /usr/local/docker/myproject/ROOT:/usr/local/tomcat/webapps/ROOT
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:
Git的安装

- Git-2.14.3-64-bit.exe
git软件包 - TortoisseGit-2.5.0.0-64bit.msi
git可视化工具 - TortoiseGit-LanguagePack-2.5.0.0-64bit-zh_CN.msi
git可视化工具中文包
第三方代码托管平台
- GitHub
- Gitee (码云)
- 码市
git的使用
-
git clone <地址>
-
git配置文件(.gitignore)
将不需要提交的文件描述添加到.gitignore

-
git add
-
git commit -m <描述>
代码提交到本地仓库
git commit -m "修改"
- git push
代码同步到服务器
GitLab
开源的代码托管平台
基于docker构建gitLab
- 拉取中文版的gitLab容器镜像
docker pull twang2218/gitlab-ce-zh:11.0.3
- 创建docker-compose.yml文件
- 注意: external_url的端口要跟nginx的一致
version: '3'
services:
web:
image: 'twang2218/gitlab-ce-zh:11.0.5'
restart: always
hostname: '192.168.94.132'
environment:
TZ: 'Asiz/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.94.132:8080'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_port'] = 8080
ports:
- '8080:8080'
- '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
3.登陆设置密码 账号: root 密码: 12345678
使用SSH的方式拉取和推送项目
- 生成SSH KEY(使用ssh-leygen工具生成)
ssh-keygen -t rsa -C "your_email@example.com"
- 复制SSH生成的公钥配置到仓库中

Nexus(依赖管理平台-maven私服)
- 拉取Nexus镜像文件
docker pull sonatype/nexus3
- 修改数据卷的权限
chmod 777 data/
- 创建docker-compose.yml文件
version: '3.1'
services:
nexus:
restart: always
image: sonatype/nexus3:3.13.0
container_name: nexus
ports:
- 8081:8081
volumes:
- /usr/local/docker/nexus/data:/nexus-data
- 默认用户名和密码
账号: admin
密码: admin123
- 在项目中使用Maven-私服
- 配置认证信息(maven的settings.xml)
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
- 配置自动化部署
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://47.112.215.6:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://47.112.215.6:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
- 将项目按模块打包上传到私服(项目依赖包部署到私服)
mvn deploy
- 将第三方JAR包上传到Nexus私服的方法
# 如第三方JAR包:aliyun-sdk-oss-2.2.3.jar
mvn deploy:deploy-file
-DgroupId=com.aliyun.oss
-DartifactId=aliyun-sdk-oss
-Dversion=2.2.3
-Dpackaging=jar
-Dfile=D:\aliyun-sdk-oss-2.2.3.jar
-Durl=http://127.0.0.1:8081/repository/maven-3rd/
-DrepositoryId=nexus-releases
搭建docker镜像私服(registry)
- 拉去registry镜像文件
docker pull registry:3.1
- 创建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
- 访问Registry仓库
http://192.168.94.132:5000/v2
- 配置Docker-Registry客户端(/etc/docker/daemon.json)
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"ip:5000"
]
}
- 重新启动服务
systemctl daemon-reload
systemctl restart docker
- 测试镜像上传
## 拉去一个镜像
docker pull nginx
## 查看全部镜像
docker images
## 标记本地镜像并指向目标仓库(ip:port/image_name:tag,改格式为标记版本号)
docker tag nginx 192.168.75.133:5000/nginx
## 查看全部镜像
curl -XGET http://192.168.75.133:5000/v2/_catalog
## 查看指定镜像
curl -XGET http://192.168.75.133:5000/v2/nginx/tags/list
## 测试删除镜像
docker rmi nginx
docker rmi 192.168.75.133:5000/nginx
使用docker-registry-frontend操作界面
- 配置docker-compose.yml配置文件
version: '3.1'
services:
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.94.132
- ENV_DOCKER_REGISTRY_PORT=5000
实现docker(nexus、registry、gitlab的一次构建到处运行)
- 将myShop项目上传到gitlab
## 1. add
## 2. commit
## 3. push
- 下载maven并配置maven环境变量
## 1. 解压maven对应的压缩包到/usr/local文件夹
## 2. 在/etc/profile中添加配置
export MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH:$HOME/bin
- 安装jdk(注意安装linux系统版本)
## 1. 配置用户环境变量
- 下载依赖包并打包项目
mvn clean package -Dmaven.test.skip=true
- 创建Dockerfile构建docker镜像
- 将项目根目录压缩并移动到image文件夹
tar -zcvf myshop.tar.gz .
mv myshop.tar.gz image/
- 创建并编辑Dockerfile文件
FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -fr *
ADD myshop.tar.gz /usr/local/tomcat/webapps/ROOT
RUN rm myshop.tar.gz
WORKDIR /usr/local/tomcat/webapps/ROOT
- 执行构建语句
docker build -t 47.112.215.6:5000/myshop .
- 上传到docker私服仓库
docker push 47.112.215.6:5000/myshop
- 创建myshop-deploy文件夹并编辑docker-compose.yml文件
version: '3.1'
services:
myshop:
restart: always
image: 47.112.215.6:5000/myshop
container_name: myshop
ports:
- 8080:8080