Giter VIP home page Giter VIP logo

sclorg / mysql-container Goto Github PK

View Code? Open in Web Editor NEW
128.0 20.0 201.0 616 KB

MySQL container images based on Red Hat Software Collections and intended for OpenShift and general usage. Users can choose between Red Hat Enterprise Linux, Fedora, and CentOS based images.

Home Page: http://softwarecollections.org

License: Apache License 2.0

Shell 94.65% Makefile 0.54% Dockerfile 4.81%
mysql dockerfile centos rhel openshift container fedora docker-image database sql

mysql-container's Introduction

MySQL SQL Database Server Container Image

Build and push images to Quay.io registry

Images available on Quay are:

This repository contains Dockerfiles for MySQL images for OpenShift and general usage. Users can choose between RHEL, Fedora and CentOS based images.

For more information about using these images with OpenShift, please see the official OpenShift Documentation.

For more information about contributing, see the Contribution Guidelines. For more information about concepts used in these container images, see the Landing page.

Versions

MySQL versions currently provided are:

RHEL versions currently supported are:

  • RHEL7
  • RHEL8
  • RHEL9

CentOS versions currently supported are:

  • CentOS7
  • CentOS Stream 9

Installation

Choose either the CentOS7 or RHEL7 based image:

  • RHEL7 based image

    These images are available in the Red Hat Container Catalog. To download it run:

    $ podman pull registry.access.redhat.com/rhscl/mysql-80-rhel7
    

    To build a RHEL7 based MySQL image, you need to run Docker build on a properly subscribed RHEL machine.

    $ git clone --recursive https://github.com/sclorg/mysql-container.git
    $ cd mysql-container
    $ git submodule update --init
    $ make build TARGET=rhel7 VERSIONS=8.0
    
  • CentOS7 based image

    This image is available on DockerHub. To download it run:

    $ podman pull quay.io/centos7/mysql-80-centos7
    

    To build a CentOS based MySQL image from scratch, run:

    $ git clone --recursive https://github.com/sclorg/mysql-container.git
    $ cd mysql-container
    $ git submodule update --init
    $ make build TARGET=centos7 VERSIONS=8.0
    

For using other versions of MySQL, just replace the 8.0 value by particular version in the commands above.

Note: while the installation steps are calling podman, you can replace any such calls by docker with the same arguments.

Notice: By omitting the VERSIONS parameter, the build/test action will be performed on all provided versions of MySQL, which must be specified in VERSIONS variable. This variable must be set to a list with possible versions (subdirectories).

Usage

For information about usage of Dockerfile for MySQL 8.0, see usage documentation.

Test

This repository also provides a test framework, which checks basic functionality of the MySQL image.

Users can choose between testing MySQL based on a RHEL or CentOS image.

  • RHEL based image

    To test a RHEL7 based MySQL image, you need to run the test on a properly subscribed RHEL machine.

    $ cd mysql-container
    $ git submodule update --init
    $ make test TARGET=rhel7 VERSIONS=8.0
    
  • CentOS based image

    $ cd mysql-container
    $ git submodule update --init
    $ make test TARGET=centos7 VERSIONS=8.0
    

For using other versions of MySQL, just replace the 8.0 value by particular version in the commands above.

Notice: By omitting the VERSIONS parameter, the build/test action will be performed on all provided versions of MySQL, which must be specified in VERSIONS variable. This variable must be set to a list with possible versions (subdirectories).

mysql-container's People

Contributors

bparees avatar caringi avatar csrwng avatar danielhelfand avatar dependabot[bot] avatar ewolinetz avatar fcarrus avatar ficap avatar gabemontero avatar hhorak avatar jhadvig avatar kargakis avatar liangxia avatar luciddreamz avatar mfojtik avatar mhutter avatar mnagy avatar mohammedzee1000 avatar nak3 avatar omron93 avatar php-coder avatar phracek avatar pkubatrh avatar pvalena avatar rhcarvalho avatar rhdedgar avatar ryanj avatar soltysh avatar yselkowitz avatar zmiklank avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mysql-container's Issues

Security checkup

Make sure exactly which users get created during initialization, what their access rights are, and so on. This should be mainly done by looking into mysql.user table. We should also document as much as possible the behaviour of (not) setting MYSQL_ROOT_USER.

Cannot set root password after database was initialized

Starting from the example template with persistent storage, where a root password is not set, trying set it triggers an error and deployment fails:

[vagrant@openshiftdev origin]$ oc env dc mysql --list                                                                 
# deploymentconfigs mysql, container mysql
MYSQL_USER=user0PG
MYSQL_PASSWORD=qwNhkOiCXe51w1wu
MYSQL_DATABASE=sampledb
[vagrant@openshiftdev origin]$ oc env dc mysql MYSQL_ROOT_PASSWORD=NewAdminPassword
deploymentconfigs/mysql
[vagrant@openshiftdev origin]$ oc get pods
NAME             READY     STATUS    RESTARTS   AGE
mysql-2-deploy   1/1       Running   0          2m
mysql-2-q7bst    0/1       Running   5          59s
[vagrant@openshiftdev origin]$ oc logs mysql-2-q7bst
Starting local mysqld server ...
Waiting for MySQL to start ...
150901 11:18:09 [Warning] One can only use the --user switch if running as root

150901 11:18:09 [Note] Plugin 'FEDERATED' is disabled.
150901 11:18:09 InnoDB: The InnoDB memory heap is disabled
150901 11:18:09 InnoDB: Mutexes and rw_locks use GCC atomic builtins
150901 11:18:09 InnoDB: Compressed tables use zlib 1.2.7
150901 11:18:09 InnoDB: Using Linux native AIO
150901 11:18:09 InnoDB: Initializing buffer pool, size = 128.0M
150901 11:18:09 InnoDB: Completed initialization of buffer pool
150901 11:18:09 InnoDB: highest supported file format is Barracuda.
150901 11:18:09  InnoDB: Waiting for the background threads to start
Waiting for MySQL to start ...
150901 11:18:10 InnoDB: 5.5.37 started; log sequence number 1599071
150901 11:18:10 [Warning] 'user' entry 'root@mysql-1-lke7j' ignored in --skip-name-resolve mode.
150901 11:18:10 [Warning] 'user' entry '@mysql-1-lke7j' ignored in --skip-name-resolve mode.
150901 11:18:10 [Warning] 'proxies_priv' entry '@ root@mysql-1-lke7j' ignored in --skip-name-resolve mode.
150901 11:18:10 [Note] Event Scheduler: Loaded 0 events
150901 11:18:10 [Note] /opt/rh/mysql55/root/usr/libexec/mysqld: ready for connections.
Version: '5.5.37'  socket: '/tmp/mysql.sock'  port: 0  MySQL Community Server (GPL)
ERROR 1133 (42000) at line 1: Can't find any matching row in the user table

Registry URL for MySql 8.0 not working

I was reading readme on https://github.com/sclorg/mysql-container/tree/master/8.0, but the registry URL mentioned here are not working

registry.access.redhat.com/rhscl/mysql-80-rhel7
https://hub.docker.com/r/centos/mysql-80-centos7/

Allow not to create database during start

The use case I'd like to support is when somebody migrates database from one machine to this container. Then the user typically has an SQL dump and wants to do just this:

  • run the container without anything being initialized
  • import data as root

The solution may be to have MYSQL_DATABASE, MYSQL_USER and MYSQL_PASSWORD optional when MYSQL_ROOT_PASSWORD is set.

FYI @mnagy

Create multiple databases

When using root access I am not able to create multiple databases inside a single container. I get grant privileges error.

mysql> CREATE DATABASE demoDB;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON demoDB.* TO 'demo'@'%' IDENTIFIED BY 'demo';
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'demoDB'

To resolve this I have to:

mysql> UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> GRANT ALL ON *.* TO 'root'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON demoDB.* TO 'demo'@'%' IDENTIFIED BY 'demo';
Query OK, 0 rows affected (0.00 sec)

By default, root user does not have grant and super privileges.

Any help is appreciated. I need to make sure the mysql 5.6 images works out of the box for me otherwise I will have to rebuild a new image.

how to set the charset when i created database

when i create a database like this
"docker run -d --name mysql -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -e MYSQL_CHAR_SET=utf8 -e MYSQL_COLLATION=utf8_unicode_ci -p 3306:3306 rhscl/mysql-57-rhel7"

but the character_set_database and character_set_server is still latin1...
what should i do to solve this

Question about the value of max_binlog_cache_size

Thanks for providing this useful container.

I am doing a research aiming at finding issues in configuration files. I have a question about one MySQL config: max_binlog_cache_size. It seems the official document says "The maximum recommended value is 4GB; this is due to the fact that MySQL currently cannot work with binary log positions greater than 4GB."

However, the default value is 18446744073709551615, which is much larger than the recommended value.

Shall we change the value to 4GB?
Thanks!

RFE: Better way to pass secret data into container

Current way of passing passwords using -e is not the best one, since even root (or whoever can talk to docker socket) should be able to read the passwords. However, with -e way, even if the variable is unset inside the container, one can read the value from docker inspect output.

This issue is meant to track an RFE to be able to specify password somehow differently, maybe in addition to the current -e option. This new way shouldn't allow to see the password even for docker admin/root.

Document selinux relabeling

Document the needed :Z option for volumes so SELinux works properly. This needs to be done for all our database images.

Make my.cnf configurable

The my.cnf should be a template where we do env substitution to provide basic customization for the mysql server to users. For beginning we should have same set of ENV vars as we had in v2. Consider this for future.

': not a valid identifierpts/mysql/scl_enable: line 2: unset: `ENV

I used mysql 5.7 to make images,it was success;but I got a error when I do docker run.
error :
': not a valid identifierpts/mysql/scl_enable: line 2: unset: ENV is probably not installed.-mysql57 /usr/share/container-scripts/mysql/common.sh: line 2: $'\r': command not found : No such file or directorys/mysql/common.sh: line 3: /usr/share/container-scripts/mysql/helpers.sh /usr/share/container-scripts/mysql/common.sh: line 4: $'\r': command not found /usr/share/container-scripts/mysql/common.sh: line 9: $'\r': command not found /usr/share/container-scripts/mysql/common.sh: line 12: $'\r': command not found /usr/share/container-scripts/mysql/common.sh: line 13: syntax error near unexpected token $'{\r''
'usr/share/container-scripts/mysql/common.sh: line 13: `function export_setting_variables() {
/usr/bin/run-mysqld: line 6: export_setting_variables: command not found

My host :
docker version
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64

Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64

On OpenShift Online Container Catalog, the link to README.md points to a symlink

On OpenShift Online Service Catalog, the link to README.md points to a symlink instead the actual README.md file. The "View Documentation" link also points to this symlink.

Screenshot from OpenShift Online Service Catalog

The link is: https://github.com/sclorg/mysql-container/blob/master/5.7/README.md
Screenshot from GitHub page

The real file is located in: https://github.com/sclorg/mysql-container/blob/master/5.7/root/usr/share/container-scripts/mysql/README.md

The same goes to mariadb-container.

Unify replication templates

Replication templates can be unified as was done for PostgreSQL recently. This'll also allow us to make extended tests nicer.

Strange differences in scripts for 5.5 and 5.6

I'm trying out the replication example, and first thing I did was compare the source for the two images 5.5 and 5.6.

The scripts mysqld-master, mysqld-slave, run-mysqld, run-mysqld-master, run-mysqld-slave differ in apparently unnecessary and strange ways between 5.5 and 5.6.

Using a tool like meld to compare the dirs 5.5 and 5.6 reveals what I mean:

image

image

I'm confused by the diffs.

  • Why does 5.5 export MYSQL_RUNNING_AS_MASTER=1 and 5.6 doesn't?
  • Why log_volume_info $MYSQL_DATADIR lines appear in different places (5.5 != 5.6)?
  • Why does the GRANT REPLICATION statements differ?
  • Why does 5.5 has some extra code related to binlog that 5.6 doesn't have?

Make debugging of our containers easier

Debugging our database images has been a bit of a pain for me, especially when I do not have access to the machine where the container in question is being run (think QE and cooperation through issues/bugzilla bugs). I often find myself in a need to craft a custom image with debugging statements which is often tedious and can waste a lot of time (especially if OpenShift does not use the image I want).

It's hard to make sense from the container logs. I don't know if something is being printed out by the entrypoint script, database initialization script, or the final exec'd binary. In case of either MySQL or PostgreSQL (don't remember which), the last line runs along the lines of "server is shutting down". This is from the pre-exec'd process and it doesn't indicate failure. For a user who does not know how the image works, this must be extremely confusing.

Proposed solutions:

  1. Let's have a unified way of printing out information about what we are doing and use that. Let's tell the user that we're starting a mysql/postgres daemon just to check/modify the database. Let's tell him we're calling the final exec. Let's tell him when and what failed. Let's make sure the output from entrypoint script stands out and that it's recognized who prints out what.
  2. Let's have a debugging mode. It could at least do a set -x. This will be helpful for us. We're just going to tell our users to set a variable and send us output from that. We should also check out the volumes. We often have to deal with permission-related bugs or user mistakes (nfs). Putting couple of ls -la statements on volumes might provide useful information. As well as calling id.

@bparees @thesteve0 @rhcarvalho @hhorak @praiskup @eliskasl

Update replication docs

  • ReplicationController should probably be replaced with DeploymentConfig, since the template doesn't create any RC explicitly, but rather a DC.
  • The example starts with 1 slave and not 3.

When mysql8 was initialized and created in Openshift 3.11, it failed due to the existence of the lost+found directory.

I found the following script in the file "root-common/usr/libexec/container-setup":

#  some config options are only valid for particular versions
if [ "`version2number $MYSQL_VERSION`" -ge "800" ] ; then
    rm -f "${CONTAINER_SCRIPTS_PATH}/cnf/10-mysql57.cnf"
fi

-------

cat 10-mysql57.cnf

[mysqld]
#  http://www.chriscalender.com/ignoring-the-lostfound-directory-in-your-datadir/
ignore-db-dir=lost+found

However: mysql8 on ocp/okd also needs this parameter, why is it deleted? I think this file 10-mysql57.cnf should be retained, just the file name leads to misunderstanding.

Allow to set-up the data directory separately

Let's allow users to setup separately the data directory. Something like that might be quite handy for users: run it once with docker run --rm -e MYSQL_PASSWORD=* ... run-mysqld-setup.sh, which configures the storage area, then run with docker run ...

Monitoring memory - add custom hook?

We have experienced mysql pods crashing many times over the past few weeks due to OOM errors.

So to avoid this happening unexpectedly we started monitoring memory usage.

There is currently no notification available on OpenShift online for a memory threshold being reached.

So we have devised a custom solution using a script which periodically checks the RSS of the mysql process and enters a row in the database if it breaches a threshold (and we can then send an email to notify our support team).

However, after a pod restart, the script (which runs as a daemon) needs to be started manually.

We tried starting this daemon using the kubernetes hook infrastructure, but it did not work.

Would it be possible to add a custom hook into the mysql image so the daemon could start automatically on restart?

Upgrading from 5.5 to 5.7 - What is best practice?

When running a 5.5 pod on openshift, what is the procedure for performing an upgrade to version 5.7? Basically I am looking at upgrading but just replacing the image with the 5.7 version will not work due to changes that need to be made to tables etc.

it went wrong when I scaled rc mysql-slave

2017-05-04T11:49:23.523858Z 0 [Note] InnoDB: Retrying to lock the first data file
2017-05-04T11:49:24.525227Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
2017-05-04T11:49:24.525305Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.
2017-05-04T11:49:25.526448Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11

add image tags to these builds

can we get build tags (i.e., centos/mysql-56-centos7:1.0) so we don't have to pull "latest" in our kubernetes rc/dc files?

Bash syntax error in run-mysqld while starting MySQL container

A weird syntax error pops up while starting a MySQL container:

Version: '5.7.21'  socket: '/tmp/mysql.sock'  port: 0  MySQL Community Server (GPL)
---> 13:17:49     MySQL started successfully
/usr/bin/run-mysqld: line 24: [: missing `]'
=> sourcing 40-datadir-action.sh ...

Line 24 in run-mysqld says:

if [ -z "${MYSQL_ROOT_PASSWORD:-}" || is_allowing_connection_with_empty_password ]; then

while it should be:

if [ -z "${MYSQL_ROOT_PASSWORD:-}" ] || [ is_allowing_connection_with_empty_password ]; then

Documentation suggestions

The documentation under 5.6/README.md describes usage pretty well, but I miss some general description of the image in few sentences. Something like "This image is meant to be used for most common use cases, provides... etc.". We should also document how to extend the image for more specific use cases.

2017-04-27T06:11:16.439317Z 2 [Note] Access denied for user 'mysql'@'localhost' (using password: NO) ---> 06:11:16 MySQL started successfully ---> 06:11:16 Setting passwords ... ERROR 1133 (42000) at line 1: Can't find any matching row in the user table

2017-04-27T06:11:16.439317Z 2 [Note] Access denied for user 'mysql'@'localhost' (using password: NO)
---> 06:11:16 MySQL started successfully
---> 06:11:16 Setting passwords ...
ERROR 1133 (42000) at line 1: Can't find any matching row in the user table

Need to verify that all database images works fine with NFS volume in OpenShift

We have to make sure that all our database images works well with the NFS volume mount inside OpenShift.

@mnagy you have to sync with @markturansky about how to setup the Volume for MySQL pod to use the NFS server you have to run in Vagrant box. Then you should deploy the MySQL, make it create database and insert some records. Then you should re-deploy MySQL (you can just change some random Env var in PodSpec) and verify that the data you created are persisted. (you will need set ConfigChange trigger for that)

Documentation of replication example for 5.6 is inaccurate

The documentation in 5.6/examples/replica/README.md is a copy-paste of 5.5/examples/replica/README.md, but the replication strategies are different.

5.5 uses binlog, and 5.6 uses GTID but that's not reflected in the documentation.

mysql 5.6 keep restarting

I see the mysql container restarting every 10-20seconds. I see this exit code in docker ps:

36b961f1d7f2        docker.io/centos/mysql-56-centos7@sha256:6803ba424dbebce4ea577882e6e37ecf368892cd4804162a7c90f7ef307bbdc1                     "container-entrypoint"   5 minutes ago       Exited (137) 3 minutes ago

There is nothing in container logs (at least nothing that smells). The mysql process just exit. From the docs, the 137 code means: No more records (read after end of file)... In some case, the 137 in docker means "container killed".

@mnagy can you please have a look at this? It is pretty annoying, because the DB get up and keep running for ~10s and then container restart, cutting all connections... then it come back again... annoying :/

Trouble adding mysql image to openshift project

Hi when i try to add the mysql image to any project that i create in the Openshift Web Console i see the following message:

Failed Scheduling | 0/1 nodes are available: 1 Insufficient memory.

And the mysql Pod stays in a pending state of deployment.

Any advice or suggestions as to how to resolve this would be greatly appreciated.

If any more information is required please let me know

Servide wide charset and collation

At present the default latin1 charset is used for created databases. It would be great if we could adjust this through env variables like: DEFAULT_CHARSET and DEFAULT_COLLATION.

root password is not set correctly

sh-4.2$ mysql -uroot
# note that no password is requestsed
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 199
Server version: 5.6.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user,host,Password from mysql.user;
+---------+---------------+-------------------------------------------+
| user    | host          | Password                                  |
+---------+---------------+-------------------------------------------+
| root    | localhost     |                                           |
| root    | mysql-1-1kgat |                                           |
| root    | 127.0.0.1     |                                           |
| root    | ::1           |                                           |
|         | localhost     |                                           |
|         | mysql-1-1kgat |                                           |
| userJJE | %             | *70EC2682A59842A350A3A8B6507ACFA8A9FCD54D |
| root    | %             | *CD600C99BA4328BB6DEC4B0636ED9B751562CDD1 |
+---------+---------------+-------------------------------------------+
8 rows in set (0.00 sec)

Test scripts extending the image in OpenShift

For example the "extend-image" example can be tested like this:

 oc new-app mysql:5.7~https://github.com/sclorg/mysql-container.git \
   --context-dir=examples/extend-image \
   --name my-mysql-rhel7d \
   MYSQL_OPERATIONS_USER=opuser \
   MYSQL_OPERATIONS_PASSWORD=oppass \
   MYSQL_DATABASE=opdb \
   MYSQL_USER=user \
   MYSQL_PASSWORD=pass

After this, connecting using opuser:oppass should work.

Make mysql command work out of box

Currently, running mysql command in a running container requires a lot of command line arguments, like hostname, username and password. I would be in favour of enabling the unix socket. This is the easiest way to do it and is the same way we do it with PostgreSQL.

Also, I'd like to create a bash script in standard path named "mysql" that will scl_source the collection and do an exec mysql. This way docker exec -ti mysql as well as oc exec will work out of box and will in my opinion greatly enhance the user experience. This I think we should also do for PostgreSQL and MongoDB images.

@mfojtik @bparees thoughts? cc @hhorak

MySQL memory continues to grow then results in OOM

I have found during load testing of an application on OpenShift Online v3 that MySQL memory continues to grow until eventually the container is killed due to OOM.

I am using mysql57.

After doing some internet research, I found a link saying that mysql does not release memory with linux THP set to true and that if THP is disabled, this issue does not occur:

https://bugs.mysql.com/bug.php?id=84003
(final comment at bottom of page)

Please could someone look into this as it is potentially a very serious issue for anyone running mysql in OpenShift Online.

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.